You are on page 1of 19

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”

Кафедра безпеки інформаційних технологій

ЗНАЙОМСТВО З UNIX-ПОДІБНОЮ ОПЕРАЦІЙНОЮ


СИСТЕМОЮ GNU/LINUX. ОСНОВНІ КОМАНДИ ОС

МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 2
з дисципліни «Операційні системи»
для студентів спеціальності 125 «Кібербезпека»
спеціалізації «Безпека інформаційних і комунікаційних систем»

Затверджено
на засіданні кафедри
безпеки інформаційних технологій
протокол № __ від ____________ р.

Львів – 2018
Знайомство з Unix-подібною операційною системою GNU/Linux.
Основні команди ОС: Методичні вказівки до лабораторної роботи №2 з
дисципліни «Операційні системи» для студентів спеціальності 125
«Кібербезпека», спеціалізації «Безпека інформаційних і комунікаційних систем» /
Укл. В. А. Мельник, Я. В. Решетар, Т. Р. Борецький. - Львів: НУ «Львівська
політехніка», 2018. – 18 с.

Укладачі: Мельник В. А., д.т.н., доц.


Решетар Я. В., асист.
Борецький Т. Р., асист.

Відповідальний за випуск:
Зав. кафедри безпеки інформаційних технологій,
д.т.н., професор Максимович В.М.

Рецензенти:
Професор кафедри безпеки інформаційних технологій,
д.т.н., доцент Мороз Л.В.
Доцент кафедри безпеки інформаційних технологій
к.ф-м.н., доцент Войтусік С.С.

2
МЕТА РОБОТИ – оволодіти практичними навичками роботи в системі
GNU/Linux. Ознайомитись із структурою файлової системи, основними
інформаційними командами, командами для роботи з файлами та каталогами.

1. ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ

UNIX-подібна операційна система – операційна система, яка утворилася під


впливом UNIX. Термін включає вільні / відкриті операційні системи, утворені від
UNIX компанії Bell Labs або такі, що адаптовані до її можливостей, комерційні і
запатентовані розробки, а також версії, засновані на вихідному коді UNIX. UNIX-
подібні операційні системи розвиваються досить динамічно. Поведінка
змінюється - додаються нові можливості. Щоб якось впорядкувати цей процес,
цілі групи, зайняті стандартизацією, розробляють системні інтерфейси в
спеціальних офіційних документах. Існує безліч таких стандартів, але фактично
Linux офіційно не підпорядковується жодному з них. Linux просто прагне
відповідати двом найбільш важливим і домінуючим стандартам - POSIX і Single
UNIX Specification (SUS, єдина специфікація UNIX).
У POSIX і SUS, зокрема, документований API мови C для інтерфейсу, що
забезпечує взаємодію з UNIX-подібними операційними системами. Фактично ці
стандарти визначають системне програмування або як мінімум його загальну
підмножину для UNIX-сумісних систем.
1.1. Cтандарти POSIX та SUS
В середині 1980-х років Інститут інженерів з електротехніки та електроніки
(Institute of Electrical and Electronics Engineers, IEEE) очолив починання по
стандартизації системних інтерфейсів в UNIX-подібних операційних системах.
Річард Столлман (Richard Stallman), засновник руху Free Software, запропонував
назвати цей стандарт POSIX (Portable Operating System Interface - інтерфейс
переносимих операційних систем UNIX).
Першим результатом цієї роботи, оприлюдненими в 1988 році, став
стандарт IEEE Std 1003.1-1988 (скорочено POSIX 1988). У 1990 році IEEE
переглянув стандарт POSIX, випустивши нову версію IEEE Std 1003.1-1990
(POSIX 1990). Необов'язкова підтримка роботи в реальному часі і потоків була
документована відповідно в стандартах IEEE Std 1003.1b-1993 (POSIX 1993 або
POSIX.1b) і IEEE Std 1003.1c-1995 (POSIX 1995 або POSIX.1c). В 2001 році
необов'язкові стандарти були об'єднані з базовим POSIX 1990, утворивши єдиний
стандарт IEEE Std 1003.1-2001 (POSIX 2001). Остання на цей момент версія була
випущена в грудні 2008 року і називається IEEE Std 1003.1-2008 (POSIX 2008).
Всі основні стандарти POSIX скорочуються до абревіатур POSIX.1, версія від
2008 року є найновішою.
В кінці 1980-х – на початку 1990-х років між виробниками UNIX-подібних
систем вирували справжні «юніксові війни»: кожен намагався закріпити за своїм
продуктом статус єдиної справжньої UNIX-системи. Кілька великих виробників
згуртувалися навколо The Open Group – промислового консорціуму, який
сформувався в результаті злиття Open Software Foundation (OSF) і X / Open. The

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.

1.2. Типи файлів та ієрархія файлової системи Linux


При роботі з ОС Linux важливо розуміти, що будь-який об’єкт в ОС
представлений як файл. Це основна особливість ОС Linux в порівнянні з
операційними системами сімейства Windows. Файли розрізняються як по своїй
структурі, так і по своєму призначенню. В ОС Linux визначені сім типів файлів:
– регулярні файли (звичайні файли)
– каталоги
– посилання
– сокети
– іменовані канали
– файли блокових пристроїв
– файли символьних пристроїв
1.2.1. Регулярні файли
До регулярних файлів відносяться бінарні файли, бібліотеки, текстові файли
і файли різноманітних додатків. ОС Linux не накладає ніяких обмежень на

4
структуру даних файлів. До їх вмісту можливий як послідовний, так і прямий
доступ.
1.2.2. Каталоги
Файли даного типу зберігають іменовані посилання на інші файли. Ім’я
файлу, що знаходяться в каталозі, насправді зберігається в батьківському каталозі,
а не в самому файлі.
Структура каталогів в Linux
Дерево каталогів в Linux починається з кореневого каталогу /. Задавати
диск, наприклад, C: в Linux неможливо. Таким чином, якщо представити дерево
каталогів наглядно, то кореневий каталог розміщений на його вершині. При
роботі з текстовими консолями(терміналами) після входу в систему ви зразу ж
автоматично опинитесь в так званому особистому, або домашньому, каталозі. У
вашому розпорядженні всі розміщені в ньому файли і підкаталоги. Інші
користувачі (крім адміністратора) не можуть змінювати/видаляти файли вашого
особистого каталогу (а при деяких налаштуваннях навіть не можуть їх читати).
Особистий каталог зазвичай знаходиться в дереві каталогів Linux за адресою
/home/loginname/ (тільки особистий каталог адміністратора називається /root).
Оскільки було б незручно кожного разу писати /home/loginname/, назва
особистого домашнього каталогу скорочується до символу тильди (~). Крім того,
доступ до особистих каталогів інших користувачів можливий через запис
~loginname.
В кожному каталозі є два особливих підкаталогів, необхідних для
формального управління ієрархією каталогів. Каталог з ім’ям, що починається з . ,
представляє собою посилання на актуальний каталог, а каталог з іменем, що
починається з .., — на каталог, розміщений на рівень вище.

Таблиця 1. Символи, що позначають вид каталогу


Символ Значення
~ Домашній каталог
. Поточний каталог
.. Каталог, розміщений на рівень вище ніж поточний

Стандарт ієрархії файлової системи


Типова UNIX-система складається з тисяч файлів. В ході розробки UNIX
закріпились визначені правила, які описують, в яких каталогах які файли
прийнято зберігати. Ці правила були пристосовані до особливостей Linux і
узагальнені в спеціальному документі - «Стандарт ієрархії файлової системи»
(Filesystem Hierarchy Standard, FHS). Практично всі дистрибутиви Linux за
винятком декількох побудовані за цим стандартом (інформацію про нього можна
знайти за адресою http://www.pathname.com/fhs/).
Файлова система починається з кореневого каталогу. Як правило, в ньому
немає ніяких файлів, тільки наступні каталоги.
/bin — містить елементарні команди Linux, призначені для керування
системою. Ці команди можуть виконуватись будь-яким користувачем. Решта

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 (відображеня переліку файлів) такі специфічні файли позначаються
додатковим символом.

Таблиця 2. Ідентифікація спеціальних файлів


Символ Тип файлу на який вказує символ
/ Каталог
* Виконуваний файл
@ Символьне посилання
- Символьний пристрій
+ Блоковий пристрій
= Pipe, FIFO
1.3. Взаємодія з користувачем в ОС GNU/Linux
Хоча при роботі з графічними оболонками (KDE, Gnome і т.п.) для
користувача доступні сучасні засоби графічної взаємодії (вікна, панелі керування
тощо), стандартним засобом взаємодії з ОС є робота командного інтерпретатора
(оболонки, shell).
Інтерпретатор команд – це спеціальна програма, яка здійснює функції
інтерфейсу між користувачем та ОС. Команди, які вводяться користувачем з
командного рядка, інтерпретуються оболонкою та посилаються як інструкції
7
низького рівня в ОС. Зрештою робота з графічним інтерфейсом часто зводиться
до виконання команд інтерпретатором у фоновому режимі (непомітно для
користувача). Досвідчені користувачі Linux частіше працюють з текстовими
командами.
Початок командного рядка відзначається запрошенням інтерпретатора – на
екрані відображається «строка запрошення» з ім’ям користувача та робочим
каталогом. Загальний формат команди, що вводиться через термінал/консоль
такий:
<назва команди> <опції> <аргументи>, де
<назва команди> – ім’я відповідного виконавчого файлу
<опції> – режими виконання команди
<аргументи> – інформація, необхідна для виконання команди
Наведемо деякі команди необхідні для здійснення навігації у файловій
системі та отримання довідкової інформації.

Таблиця 3. Інформаційні команди


Назва команди Функції, які виконує команда
man Система допомоги
help Короткий синтаксис основних команд
locate Пошук файлів, використовуючи індексну базу
date Виводить інформацію про системні дату і час
Пошук бінарних файлів(утиліт), результатних
whereis (початкових) текстів, файлів допомоги
who Інформація про активних користувачів
whoami Виводить поточне реєстраційне ім’я
users Виводить список підключених користувачів
uname Виводить інформацію про ОС
Виводить список підключених користувачів і що вони
w роблять на даний момент
hostname Виводить інформацію про ім’я комп’ютера
echo <текст> Виведення тексту на екран

8
Таблиця 4. Команди навігації по файловій системі
Назва команди Функції, які виконує команда
pwd Відображення поточної директорії
passwd Дозволяє змінити пароль користувача
cd <директорія> Змінює поточну директорію
Відображає вміст директорії, опція розширена
ls [-парам] інформація
mkdir <директорія> Створює директорію
Відновлює час доступу та модифікації кожного
touch <файл> файлу до поточного часу, якщо файлу немає
створює пустий файл
cp <джерело><призначення> Копіювання файлів
mv <джерело><призначення> Переміщення файлів
cat <файл1> .. <файлN> Об'єднує файли та виводить на стандартний вивід

ln [ключ]... ціль Створює посилання на вказаний TARGET з не


обов’язковим ім’ям LINK_NAME. Опція s
[Імя_посилання] символьне посилання.
Здійснює підрахунок к-ті рядків, слів, символів,
wc <файл> байтів файлу
more або less ФАЙЛ Команди виводу великих файлів
unlink ФАЙЛ Видалення файлу
rm ФАЙЛ Видалення файлів, директорій
-d, --directory Видаляє каталог
-r, -R, --recursive Рекурсивно видалити вміст каталогу
Здійснює пошук у заданому каталозі файлів, що
find <каталог> -name<ім’я> відповідають параметру ім'я.
file ФАЙЛ Визначає тип файлу
Копіює стандартний ввід в кожен ФАЙЛ, а також в
tee [ФАЙЛ] стандартний вивід.

1.4. Запуск програм/команд на виконання, управління ними під час


виконання
Запуск програм з X Window (мається на увазі графічна оболонка). В X
програми, як правило, запускаються через меню або при натисканні кнопки миші
на піктограмі. У KDE та Gnome (графічні оболонки в ОС Linux) є поєднання
клавіш (Alt + F2), що забезпечує швидкий запуск програм.
Текстова консоль, емулятор терміналу. Крім того, можна запускати
програми/команди в емуляторі терміналу (наприклад, xterm, konsole і т. д.) або в
текстовій консолі. Для цього потрібно просто вказати назву програми і натиснути
клавішу Enter.
Як правило, досить просто вказати назву програми. Потім shell-
інтерпретатор шукає програму в усіх каталогах, перерахованих у змінній
середовища PATH. У наступних рядках показано, як зазвичай налаштовується ця
змінна:
user $ echo $PATH
/Usr /local /sbin: /usr /local /bin: /usr /sbin: /usr /bin: /sbin: /bin: /usr /games
9
Якщо необхідно запустити програму, яка знаходиться в якомусь іншому
каталозі, то потрібно вказати шлях до неї повністю. Це стосується в тому числі
програм поточного каталогу. В такому випадку шлях вказується просто як крапка
(тобто, наприклад, ./myprog).
Виконувані файли. Виконувані програми в Linux характеризуються
наявністю біта доступу x. Такий файл називається виконуваним (executable).
Таким чином розширення файлів EXE, що застосовується в Windows стає не-
потрібним (крім файлів бібліотеки Mono – реалізації Microsoft .NET Framework).
Пріоритетні та фонові програми.
Якщо запускати програми в X через меню, то вони будуть працювати в
вигляді так званих фонових процесів, не заважаючи один одному. Ці процеси
також можуть запускати інші програми ще до завершення ініціації програми.
Зовсім інакше все влаштовано при виконанні програми в текстовій консолі або
емуляторі терміналу. Програма запускається як пріоритетний процес. Перш ніж
запустити наступну програму, доведеться дочекатися завершення роботи
поточного процесу.
Однак в командному вікні або текстової консолі все ж можна запускати
програми у фоновому режимі. Для цього після назви програми потрібно просто
поставити символ &, наприклад (emacs – програма текстовий редактор):
user$ emacs &
Якщо користувач забуде поставити &, можна поступово перевести
виконання програми в фоновий режим. Для цього необхідно перервати виконання
програми, натиснувши поєднання клавіш Ctrl + Z, а потім відновити виконання за
допомогою команди bg:
user$ emacs
<Ctrl> + <Z>
[1] + Stopped emacs
user $ bg
[1] + emacs &
Якщо замість bg використовувати команду fg, то програма буде
виконуватися як пріоритетний процес.
При виконанні деяких програм у фоновому режимі часом можуть заважати
численні текстові повідомлення, що видаються при цьому. Щоб проігнорувати їх
потрібно просто переадресувати вивід в каталог /dev/null. Наприклад, наступна
команда дозволяє відформатувати USB-носій в фоновому режимі:
root$ mkfs.ext3 /dev/sdc > /dev/null &

1.5. Виконання програм/команд та переадресація вводу-виводу


Переадресація вводу-виводу
При виконанні програм існують так звані стандартні файли. При цьому
термін «файл» має дещо інше значення, ніж зазвичай, мова йде не про справжні
файли, а про дескриптори файлів, які обробляються на рівні операційної системи
як звичайні файли:
- стандартний ввід – програма, що виконується в даний момент, зчитує весь
стандартний ввід. Джерелом стандартного вводу зазвичай є клавіатура.
10
- стандартний вивід – сюди переадресовується весь програмний вивід
(наприклад список файлів, виведений командою ls). Стандартний вивід зазвичай
відображається у вікні терміналу/консолі.
- стандартні помилки – в поточному терміналі/консолі зазвичай
показуються і повідомлення про помилки.
Однак введення і виведення можна переадресовувати. Наприклад,
можливий випадок, в якому вміст поточного каталогу має не відображатись на
екрані, а зберігатися в файлі. Таким чином, стандартний вивід повинен
переадресовуватися в справжній файл. В терміналі Linux це робиться за
допомогою символу >:
user$ ls *.tex > content
Зараз в файлі content знаходиться список всіх TEX-файлів, розташованих в
поточному каталозі. Найчастіше застосовується саме такий спосіб переадресації
виведення. Однак є ще два варіанти: 2> файл переадресовує повідомлення про
помилки в зазначений файл; >& файл або &> файл переадресовують в зазначений
файл і повідомлення про помилки, і програмний вивід. Якщо використовувати
замість > подвійний символ >>, то все введення дописується в кінці вже наявного
файлу.
Переадресація введення здійснюється за допомогою < файл: команди, які
очікують введення з клавіатури, зчитують введення з зазначеного таким чином
файлу. Неможливо одночасно обробляти файл і записувати в нього ж результати
обробки. Команда sort dat > dat або sort < dat > dat приводить до видалення
файлу dat. В табл. 5 продемонстровані можливості переадресації вводу і виводу.

Таблиця 5. Переадресація вводу та виводу


Команда > файл Перенаправлення стандартного виводу в файл
Команда < файл Зчитування вводу з вказаного файлу
Команда 2> файл Перенаправлення повідомлень про помилки в файл
Команда >& файл Перенаправлення виводу і помилок
Команда &> файл Перенаправлення виводу і помилок
Команда >> файл Дописує стандартний вивід в кінець файлу
Команда &>> файл Дописує стандартний вивід і помилки в кінець файлу
Команда1 | Команда2 Передає вивід команди1 команді2
Команда | tee файл Показує вивід і одночасно зберігає копію в файл

Програмні канали
Програмний канал (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)

Таблиця 6. Виконання декількох команд


Команда Функція
команда1 ; команда2 Виконує команди одна за одною
команда1 && команда2 Виконує команду2, якщо команда1 була виконана успішно
команда1 || команда2 Виконує команду2, якщо команда1 повертає помилку
команда & Запускає команду в фоновому режимі
команда1 & команда2 Запускає команду1 в фоновому режимі, команду2 – в явному
(команда1 ; команда2) Виконує дві команди в одній і тій же оболонці

Інші можливості для створення умов і розгалужень для команд пов'язані з


використанням команди-оператора if.

2. ПОРЯДОК ВИКОНАННЯ РОБОТИ

1. Зайдіть в систему під вашим ім'ям користувача.


2. Змініть ваш пароль.
3. Виведіть системну дату.
4. Визначте кількість рядків у файлі:
13
Варіант Файл
1, 5, 9, 13, 17, 21, 25 /etc/passwd
2, 6, 10, 14, 18, 22, 26 /etc/group
3, 7, 11, 15, 19, 23, 27 /etc/profile
4, 8, 12, 16, 20, 24, 28 /etc/fstab

5. Виведіть на екран вміст відповідного файлу.


6. Виведіть календар на <2000+№варіанту> рік.
7. Виведіть список користувачів що паралельно працюють з системою.
8. Наберіть команду ping –с 4 localhost. Поясніть результат.
9. Скопіюйте (скопіюйте, а не перемістіть, бо система перестане працювати
коректно) файли у ваш домашній каталог різними способами. Якщо файл 1 або 2
не знайдено в каталозі /bin, шукайте його в каталогах /usr/bin, /sbin або /usr/sbin

Варіант Файл 1 Файл 2


1, 11, 21 /bin/cat /bin/at
2, 12, 22 /bin/cal /bin/chmod
3, 13, 23 /bin/ls /bin/chown
4, 14, 24 /bin/tee /bin/file
5, 15, 25 /bin/more /bin/gzip
6, 16, 26 /bin/date /bin/gunzip
7, 17, 27 /bin/cp /bin/ps
8, 18, 28 /bin/mv /bin/csh
9, 19 /bin/lpr /bin/sh
10, 20 /bin/find /bin/ksh

10. Створіть каталог lab_2.


11. Скопіюйте в нього з вашого домашнього каталогу копію файлу1, яку ви
отримали в п.9, під ім'ям my_<ім’я файлу 1>.
12. Перемістіть в цей каталог з вашого домашнього каталогу копію файлу 2,
яку ви отримали в п.9, перейменувавши його при цьому в my_<ім’я вихідного
файлу 2>. За ім’я вихідного файлу слід брати саме ім’я файлу, без імен каталогів і
шляху до файлу (інакше символ "/" буде проінтерпретований системою зовсім не
так, як Ви очікуєте). Виведіть вміст каталогу lab_2.
13. Перейдіть у свій домашній каталог і переконайтеся в тому, що все
зроблено правильно.
14.Створіть каталог lab_2_<№варіанту> і перейдіть в нього.
15.Скопіюйте в каталог lab_2_<№варіанту> файл з п.4 під ім'ям new<ім’я
вихідного файлу>.
16. За допомогою команд cat і less перегляньте його вміст.
17.Перейдіть у свій домашній каталог.
18. Видаліть каталог lab_2_<№варіанту>.
19. Виконати індивідуальне завдання згідно варіанта в таблиці:
14

Завдання
вар
У своїй домашній директорії створити трирівневу структуру каталогів. В директорії
2-ого рівня створити файл з ім'ям var_1. Графічно відобразити структуру створених
1 каталогів. Запустити у фоновому режимі пошук усіх .htm файлів у каталозі /usr.
Паралельно записати у файл системну дату і час. Вивести на екран вміст файлу за
допомогою команд сat та less.
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії
другого рівня створити файл з ім'ям var_2, потім перемістити його у директорію
2 першого рівня. Продемонструвати вміст домашньої директорії та записати результат у
файл, згодом дописати у файл ім’я користувача, комп’ютера та системний час. Вивести
вміcт файлу на екран.
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії
другого рівня створити файл з ім'ям var_3 та скопіювати його у директорію першого
рівня з новим ім'ям new_var_3. Здійснити пошук по всьому дереву каталогів та
3 перевірити чи є в системі файли коду мовою С (.c), результати пошуку (а також
повідомлення про помилки) переадресувати у файл new_var_3. Дописати у файл
графічне відображення структури створених каталогів і системну дату.
У своїй домашній директорії створити трирівневу структуру каталогів. В директорії
2-ого рівня створити файл з ім'ям var_4 та занести в нього довільний текст через
4 термінал. Обчислити кількість рядків і символів у файлі з одночасним виводом
результату на екран та в новий файл new_var_4 в директорії 3-го рівня.
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії
2-ого рівня створити файл з ім'ям var_5 та скопіювати його у директорію першого рівня.
5 Перейменувати файл у директорії 2-го рівня на old_var_5. Вивести вміст кожної
директорії з записом результату у файл var_5. Дописати у файл поточні дату і час.
У своїй домашній директорії створити дворівневу структуру каталогів. У директорії
2-ого рівня створити файл з ім'ям var_6 та перемістити його у директорію першого рівня.
6 Продемонструвати вміст кожної директорії. Записати у файл імена усіх користувачів, що
одночасно працюють з системою, системні дату, час а також графічне відображення
структури створених каталогів.
У своїй домашній директорії створити трирівневу структуру каталогів. У директорії
2-ого рівня створити файли var_7_1 та var_7_2 та перемістити їх у директорію першого
рівня. Видалити пусті директорії. У фоновому режимі здійснити пошук у кореневому
7 каталозі усіх файлів з початком назви файлу var_ . Записати у файл var_7_1 перелік
директорій кореневого каталогу, а у файл var_7_2 вміст домашнього каталогу. За допо-
могою команди cat вивести на екран вміст var_7_2.
У своїй домашній директорії створити каталог і файл у ньому var_8.txt. Перейти у
директорію, що включає в себе конфігураційні файли для всієї системи (/etc) та записати
8 у файл var_8.txt перелік усіх файлів з розширенням .txt забезпечивши одночасний вивід
результату на екран.
У своїй домашній директорії створити 4-рівневу структуру каталогів. В директорії 3-ого
рівня створити файл з ім'ям var_9. Скопіювати файл у кожний з каталогів вашої
9 структури надавши кожній копії відмінне ім'я. Вивести графічне відображення структури
створених каталогів. У кожен з файлів записати повний шлях до нього та поточні дату і
час виконання операції.
У своїй домашній директорії створити 3-рівневу структуру каталогів. У директорії 3-го
рівня створити файл var_10 та перемістити його у директорію першого рівня.
10 Продемонструвати вміст домашньої директорії та одночасно записати результат у файл.
Дописати у файл довільний текст введений у вікні терміналу. Підрахувати кількість
рядків, слів та символів у цьому файлі.

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
НАВЧАЛЬНЕ ВИДАННЯ

ЗНАЙОМСТВО З UNIX-ПОДІБНОЮ ОПЕРАЦІЙНОЮ СИСТЕМОЮ


GNU/LINUX. ОСНОВНІ КОМАНДИ ОС

МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи №2
з дисципліни «Операційні системи»
для студентів спеціальності 125 «Кібербезпека»,
спеціалізації «Безпека інформаційних і комунікаційних систем»

Укладачі: Мельник Віктор Анатолійович,


Решетар Ярослав Васильович,
Борецький Тарас Романович

19

You might also like