1   2   3   4   5   6
Ім'я файлу: OS-Labs-1-6_22.pdf
Розширення: pdf
Розмір: 1042кб.
Дата: 10.11.2022
скачати

cd <dir>
Зазначений каталог <dir> стає вашим поточним каталогом.
Якщо каталог не визначений, тов якості імені цільового каталогу використовується домашній каталог користувача.
Sh
Запускається новий shell, у якому ви можете виконати будь-яку кількість команд. Для повернення в vi натисніть Ctrl-D.
!<command> Залишок рядка після знака “ !” передається в shell як команда для виконання. В текст команди <command> замість символів '%' і ' #' підставляються імена поточного файлу й останнього файлу, що редагувався, а символ '
!' заміняється на текст попередньої команди. Ці підстановки повторюються на екрані, але запам’ятовується рядок цієї команди без підстановок.
42

Операційні системи – лабораторний практикум
Якщо з моменту останньої зміни в буфері редагування запис файлу не здійснювався, то перед виконанням команди видається попередження. Коли команда виконається, висвітлюється знак “!”.
Якщо ви використовуєте оболонку C-shell і встановлюєте змінну
prompt для виводу підказки-вказівки prompt>, необхідної для роботи з
інтерактивними shell, то при використанні вами вищенаведених команд
prompt розглядається як ім'я файлу. Це може привести до виникнення несподіваних ситуацій. Щоб уникнути їх, використовуйте значення prompt, призначуване за замовчуванням, яке визначено у файлі
/usr/lib/mkuser/mkuser.cshrc.
Quick Reference Chart for the vi editor
43

Операційні системи – лабораторний практикум
Завдання до виконання
23.Завантажтеся в систему під Вашим користувацьким ім'ям.
24.Створіть новий текстовий файл text за допомогою редактора vi.
Наберіть два абзаци тексту. Текст повинен містити Ваше прізвище
(наприклад, у вигляді підпису). Запишіть файли під іменами text і text1, вийдіть із редактора.
25.Установіть на файл text1 права доступу так, щоб Ви могли тільки читати цей файл, але не модифікувати його.
26.Завантажте файлу редактор, скопіюйте перші 2 рядка тексту в буфер і вставте їх у кінець тексту.
27.Запишіть файл під тим же ім'ям.
28.Не виходячи з редактора завантажте файл text1 і, попередньо відкривши новий shell і змінивши права доступу на файл, запишіть файл, не виходячи з редактора.
29.Користуючись пойменованими буферами, перенесіть 3 рядки тексту з першого файлу в другий. Збережіть зміни. Вийдіть з редактора.
30.Відкрийте у редакторі файл text і в кінець його додайте уміст файлу
text1.
31.Запишіть отриманий файл як
text2 і, не виходячи з редактора, видаліть файли text і text1.
44

Операційні системи – лабораторний практикум
Лабораторна робота №4. Командна оболонка shell,
стандартні потоки вводу/виводу, фільтри і
конвеєри
Мета
Оволодіння практичними навичками перенаправлення
стандартних потоків, роботи з фільтрами і організації конвеєрів
Завдання для самостійної підготовки
1. Вивчити:
♦ командні оболонки, їх запуск, конфігураційні файли;
♦ стандартні потоки і їх перенаправлення;
♦ організацію конвеєрів;
♦ організацію фільтрів і команди, використовувані як фільтри.
2. Ознайомитись з такими командами UNIX:
tee, find, cut, date, grep, sort
Звернути увагу на метасимволи *, ?, /, […], $ і направила інтерпретації
їх при використанні одинарних та подвійних лапок та "…".
Розібратись з використанням в командах операторів перенаправлення потоків і організації конвеєрів ">", "<", "|" і використанням псевдопристрою /dev/null.
3. Відповідно до завдання підготувати послідовність команд для його виконання
Довідковий матеріал
У цій роботі ми розглянемо деякі можливості командних оболонок, які дозволяють користувачам гнучко формувати завдання для виконання операційною системою.
Кожна командна оболонка в процесі свого запуску робить налаштовування системного оточення (виконує ініціалізацію системних змінних та змінних командної оболонки), для чого використовує визначені файли. Їх щонайменше два – глобальний і локальний (деякі оболонки можуть використовувати більшу кількість конфігураційних файлів). Глобальні конфігураційні файли для всіх оболонок знаходяться в каталозі
/etc.
Локальні конфігураційні файли для всіх оболонок знаходяться в домашньому каталозі користувача. Імена конфігураційних файлів, як правило, закінчуються на ‘rc’. Локальні файли роблять “прихованими”, щоби вони не заважали користувачу в його повсякденній роботі (приховані файли мають
45

Операційні системи – лабораторний практикум
ім’я, що починається з символу ‘
.’, команда ls без параметрів їх не показує). Приклади конфігураційних файлів: для sh – /etc/profile і

/.profile, для csh – /etc/cshrc і /.cshrc, для tcsh –
/etc/cshrc і /.cshrc, а також /etc/tcshrc і /.tcshrc (двох останніх може і не бути).
Конфігураційні файли є звичайними командними файлами (докладніше про командні файли див. Лабораторну роботу Часто в якості параметру деякої команди нам треба вказати не один файла кілька файлів, назви яких мають певні спільні риси. В таких випадках використовують так звані маски пошуку. Спеціальний символ ‘
?’ в масці означає один будь-який символа спеціальний символ ‘
*’ – будь-яку послідовність символів. Наприклад, команда ls /bin/???? виведе на екран всі файли з каталогу
/bin, імена яких складаються з чотирьох символів, а команда ls /etc/d* виведе на екран всі файли з каталогу
/etc, імена яких починаються з літери
d. Також можна задати список символів, наприклад, маска [abc]??? задає ім’я з чотирьох літер, перша з яких – a, b чи c. Для пошуку файлів за певними ознаками можна використовувати команду find. Перший параметр цієї команди (обов’язковий) – це каталог, з якого починається пошук (наприклад,
/ – кореневий каталог, далі – параметр, що задає ознаку пошуку (наприклад, -name – пошук файлів, імена яких відповідають заданій масці, –atime – пошук файлів, дата модифікації яких відповідає заданій умові), далі іде власне маска пошуку, а далі – дія.
Найтиповіша дія – –print, вивід результатів пошуку на екран. Якщо цей параметр не вказати, пошук відбуватись буде, а от результатів його видно не буде.
Наприклад:
find / -name "*.c" –print
виведе на екран список всіх файлів, імена яких мають розширення с, тобто вихідних кодів на мові програмування С
5
Ще одна можливість оболонок – перенаправлення потоків вводу- виводу. Як правило, більшість команд (утиліт) приймає інформацію з клавіатури, або з файлу, якщо його вказано як параметр, і виводить результати на екран. Однак, фактично вони працюють із так званими стандартними потоками вводу і виводу, які пов’язані з певними файлами. Файл в системі UNIX розглядається як потік байт. Оскільки пристрої в UNIX розглядаються як файли, а операції вводу і виводу – як читання і запис у
5
Якщо ваш UNIX поставляється з вихідними кодами (Linux, FreeBSD), то таких файлів буде безліч!
46

Операційні системи – лабораторний практикум
відповідні файли, це дозволяє легко переводити вхідний і вихідний потоки з файлів на пристрої чи навпаки.
Стандартний ввід за замовчанням зчитується з клавіатури. Якщо в якості параметру вказано ім’я файлу, то замість стандартного вводу відповідна утиліта буде організовувати вхідний потік з указаного файлу (але так діють не всі команди!) Вихідних потоків є два – стандартний потік виводу (за замовчанням в сучасних системах – на екран монітору), і потік повідомлень про помилки (за замовчанням – туди ж.
Оболонка дає змогу перенаправити потоки у заданий файл. Символ ‘ <’ перенаправляє вхідний потік. Після цього символу очікується ім’я файлу або пристрою, з якого буде братись вхідний потік.
Наприклад, команда cat без параметрів очікує ввід з клавіатури, і кожний рядок передає на екран монітора. Команда cat my_file замість вводу з клавіатури виведе на екран вміст файлу my_file, якщо такий існує, і повідомлення про помилку, якщо такого не існує. Команда cat < my_file наперший погляд буде робити те ж саме, але з точки зору операційної системи і самої утиліти cat все буде відбуватись по-іншому. В попередньому випадку командна оболонка запускала утиліту cat і передавала їй параметр командного рядка my_file, а сама утиліта cat вже інтерпретувала цей параметр як ім’я вхідного файлу. В останньому випадку командна оболонка запускала утиліту cat без параметрів, але передавала їй вміст файлу my_file в якості вхідного потоку. Команда cat > my_file перенаправляє вихідний потік. Оскільки вхідний потік не перенаправляється, ввід буде очікуватись з клавіатури. Тому ця команда створить файл my_file, якщо він не існує, знищить вміст файлу my_file, якщо він існує, і буде записувати в цей файл все, що буде введено з клавіатури, аж поки не поступить символ кінця файлу EOF (Ctrl+D). Існує також можливість дописати інформацію в кінець файлу, не знищуючи його вмісту. Така команда буде мати вигляд cat >> Команда < my_file1 > my_file2
47

Операційні системи – лабораторний практикум
перенаправляє як вхідний, так і вихідний потік. Якщо файл my_file1 існує, то його вміст буде записано в файл my_file2. Якщо не існує, то повідомлення про помилку буде виведено на екран. Потік повідомлень про помилки в оболонці sh перенаправляється окремо, він позначається
2>.
Наприклад, команда
cat < my_file1 > my_file2 2> у разі, якщо файл my_file1 існує, запише його вміст в файла якщо не існує, то запише повідомлення про помилку в файл my_file3.
Важливо наголосити, що оболонки csh і tcsh не мають засобів безпосередньо перенаправляти потік повідомлень про помилки. Тим не менше, засобами цих оболонок також можна організувати окреме перенаправлення потоків завдяки хитрим прийомам програмування.
Інформацію про це можна знайти в літературі.
Дуже часто потік помилок намагаються взагалі “загасити”. Для того, щоби знищити якийсь потік, існує спеціальний пристрій /dev/null. Все, що в нього направляється, зникає безслідно.
Перенаправлення вводу-виводу широко використовується у двох випадках. Перший – це запуск утиліт у фоновому режимі. Щоби їхня робота не заважала роботі користувача з терміналом, слід так перенаправити потоки вводу-виводу, щоби вони працювали лише з файлами. Другий – це використання спеціальних команд-утиліт, які призначені саме для того, щоби прийняти певну інформацію з одного файлу, обробити її, а результат записати у другий файл. Такі утиліти називаються фільтрами. Утиліта cat, варіанти використання якої з перенаправленням потоків було розглянуто вище – це простіший фільтр. Він практично не обробляє інформацію, лише може зчіплювати кілька файлів в один. Інші корисні фільтри: cut, grep, sort.
Утиліта cut переглядає вхідний файл, і виділяє з кожного його рядка
інформацію за ознаками розміщення в певних колонках або полях.
Наприклад, рядки файлу /etc/passwd розділяються на поля за допомогою символу ‘:’. Перше поле – login, пяте поле – інформація про користувача.
Якщо ми хочемо надрукувати лише цю інформацію, ми можемо дати команду –d: –f1,5 < Ключ –d задає символ-роздільник полів (у цьому випадку – ‘ :’), ключ –f – список полів, що треба роздрукувати (у цьому випадку – 1 і 5).
Утиліта grep виводить лише ті рядки, в яких зустрічається заданий рядок пошуку. Утиліта sort виконує сортування вхідного потоку,
48

Операційні системи – лабораторний практикум
наприклад, за абеткою. Докладніше про ці та інші фільтри вам слід дізнатися з довідкової системи man.
Існує можливість перенаправити вихідний потік однієї утиліти безпосередньо у вхідний потік іншої, без використання тимчасових файлів.
Це так звані конвеєри (pipe). В системі UNIX всі утиліти, що поєднані в конвеєр, запускаються паралельно і обробляють інформацію по мірі її надходження. Конвеєр утворюється за допомогою символу ‘|’ таким чином
util1 | util2 | При утворені конвеєра окремо перенаправляти вхідні й вихідні потоки на проміжних стадіях не можна – це буде або сприйнято як синтаксична помилка, або результат може бути непередбачуваним. Приклад конвеєру:
ps –al | grep root | Команда ps з ключами –al направить у вихідний потік список всіх процесів у системі, grep root вибере з них лише ті, які виконуються від
імені а, more забезпечить вивід їх на екран посторінково. Інший приклад /etc/passwd | cut –d: –f1,5 | more

Ця команда зробить те ж саме, що й приклад з командою
cut, що розглядався раніше, але вивід на екран буде посторінковим.
Якщо проміжні результати на якійсь із стадій конвеєра бажано зберегти, можна скористатись командою tee my_file. Ця команда візьме вхідний потік, передасть його без змін у вихідний потік і одночасно продублює у файл my_file
6
. Наприклад, так можна модифікувати один із розглянутих вище прикладів:
ps –ef | grep root | tee my_file | more
Тепер мине лише побачимо на екрані посторінково виведений список всіх процесів а, але й збережемо його у файлі my_file.
6
Походження назви цієї команди добре пояснює її дію. Взагалі “tee” – це назва літери Т в англійській абетці. Літера Т якраз і використовується, щоби проілюструвати відгалуження, розщеплення потоку на основний і бічний (коли натякають на розщеплення потоку на два еквівалентні, використовують літеру
“Y”).
49

Операційні системи – лабораторний практикум
Завдання до виконання
1. Перейдіть у каталог /bin. Перегляньте список усіх файлів, що починаються із символу, який визначено в таблиці індивідуальних завдань.
2. Перегляньте список файлів, імена яких складаються з визначеної у таблиці індивідуальних завдань кількості символів.
3. Перегляньте список файлів, імена яких починаються із символів, які визначено в таблиці індивідуальних завдань. Зробіть це декількома способами. Створіть в Вашому домашньому каталозі підкаталог lab_4 і перейдіть в нього.
5. За допомогою команди cat створіть файл my_text і запишіть у нього кілька рядків. Потім за допомогою команди cat допишіть у нього ще кілька рядків.
6. Підрахуйте кількість файлів у каталозі, визначеному з таблиці
індивідуальних завдань, використовуючи і не використовуючи конвеєри. Порівняйте результат.
Таблиця індивідуальних завдань
варіант п.1
п.2
п.3
п.6, 7
1
a
2
a, b, c, d /bin
2
b
3
e, f, g, h /usr
3
c
4
i, j, k, l /usr/bin
4
d
5
m, n, o, p /home
5
f
2
q, r, s, t /var
6
g
3
u, v, w
/
7
h
4
x, y, Ваш домашній каталог, d, k, l /tmp (або /var/tmp)
9
l
3
m, g, y
/sbin
10
n
2
x, z, r, q /usr/sbin
7. Підрахуйте кількість файлів у каталозі, визначеному з таблиці
індивідуальних завдань, при цьому зберігши список файлів у файлі filelist, використовуючи команду tee.
8. Починаючи з Вашого домашнього каталогу, виведіть на екран у повному форматі назви усіх файлів і каталогів, що починаються на ‘m’. При цьому перед виводом кожної назви на екран повинен виводитися запит на його підтвердження.
50

Операційні системи – лабораторний практикум. Починаючи з кореневого каталогу, виведіть на екран імена всіх каталогів, що останній раз змінювалися більш 15 днів назад.
10.Виведіть на екран тільки час, що повертається командою date.
11.Виведіть на екран список усіх користувачів системи, тобто перші поля кожного рядка файлу /etc/passwd (роздільник полів — символ ‘:’).
12.Виведіть на екран імена усіх файлів у каталозі /bin, що містять слова
Software чи software. Потік помилок при цьому не повинний виводитися на екран.
13.Відсортуйте конфігураційний файл Вашого shell (.profile
,
.cshrc) відповідно до кодової таблиці ASCII так, щоб при цьому
ігнорувалися пробіли на початку рядків.
51

Операційні системи – лабораторний практикум
Лабораторна робота №5. Процеси в ОС UNIX і
керування ними
Мета
Оволодіння практичними навичками роботи з процесами —
створення і знищення, керування процесами і їхній аналіз
Завдання для самостійної підготовки
1. Вивчити:
поняття процесу і його характеристики;
вивід на екран списку процесів і його аналіз;
фонові й активні процеси;
пріоритет процесів і його зміна;
відправлення сигналів процесам, організація перехоплення сигналів;
виконання завдань у системі в заданий час і з заданою періодичністю.
2. Ознайомитись з такими командами UNIX:
ps, ptree, pgrep, kill, pkill, fg, bg, jobs, crontab,
at
Зверніть увагу на використання параметру командного рядка "
&"
3. Скласти послідовність команд для виконання необхідного варіанта завдання
Довідковий матеріал
UNIX – багатозадачна система з розділенням часу. Це означає, що в системі одночасно виконується багато процесів. Кожний процес асоційований з певним користувачем, від імені якого цей процес діє. Для того, щоби переглянути список процесів, існує команда ps. Ця команда має багато ключів-модифікаторів, які визначають, яку саме інформацію про процеси повинна виводити команда. Слід зазначити, що в різних системах
UNIX значення цих ключів може суттєво відрізнятись. Типові ключі:
-a
виводить інформацію про всі процеси, а не лише про процеси даного користувача, -l та -x виводять розширену інформацію про процес.
Кожний процес в системі має свій унікальний ідентифікатор – PID. За цим ідентифікатором можна звертатись до процесу. Крім того, кожний процес виникає не сам по собі – він має так званий батьківський процес, що характеризується ідентифікатором

1   2   3   4   5   6

скачати

© Усі права захищені
написати до нас