Professional Documents
Culture Documents
ОС ЛР №3 2018
ОС ЛР №3 2018
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 3
з дисципліни «Операційні системи»
для студентів спеціальності 125 «Кібербезпека»
спеціалізації «Безпека інформаційних і комунікаційних систем»
Затверджено
на засіданні кафедри
безпеки інформаційних технологій
протокол № __ від ____________ р.
Львів – 2018
Робота з командною оболонкою BASH: Методичні вказівки до
лабораторної роботи №3 з дисципліни «Операційні системи» для студентів
спеціальності 125 «Кібербезпека», спеціалізації «Безпека інформаційних і
комунікаційних систем» / Укл. В. А. Мельник, Я. В. Решетар, Т. Р. Борецький. -
Львів: НУ «Львівська політехніка», 2018. – 30 с.
Відповідальний за випуск:
Зав. кафедри безпеки інформаційних технологій,
д.т.н., професор Максимович В.М.
Рецензенти:
Професор кафедри безпеки інформаційних технологій,
д.т.н., доцент Мороз Л.В.
Доцент кафедри безпеки інформаційних технологій
к.ф-м.н., доцент Войтусік С.С.
2
МЕТА РОБОТИ – набути базових навиків роботи та адміністрування в
системі Linux за допомогою командної оболонки BASH; ознайомитись з
особливостями оболонки, виконанням команд у ній, змінними середовища,
синтаксисом написання BASH-сценаріїв.
3
Рядки з командами можна змінювати в текстовому редакторі, тобто
вставляти і видаляти символи у будь-якому місці. Розкладку клавіатури в bash
можна конфігурувати практично довільно. Зокрема, на клавіатурі можна задавати
спеціальні символи (а також клавіші управління курсором і спеціальні клавіші)
для введення бажаних команд. Можна перемикатися між редакторами emacs і vi.
При цьому всі основні команди, пов'язані з редагуванням, залишаються присвоєні
одним і тим самим клавішам в обох редакторах.
1.1.2. Скорочення пов’язані з псевдонімами
При вводі команд оболонки можна суттєво скоротити роботу по набору за
допомогою команди alias. Вона визначає скорочення (псевдонім команди). При
обробці командного рядка програма перевіряє, чи міститься в першому слові
скорочення. Якщо це так, то скорочення замінюється повним текстом.
Скорочення для певних поєднань параметрів або імен файлів застосувати не
можливо, оскільки bash не шукає скорочень у всіх параметрах команди. Однак
bash розпізнає особливі випадки, коли в одному командному рядку
перераховуються декілька команд (наприклад, при використанні програмних
каналів, підстановці команд, послідовного виконання команд за допомогою ;), і
переглядає всі наявні назви команд – чи немає в них скорочень.
user$ alias cdb='cd ~kofler/linuxbuch'
Показана вище команда визначає скорочення cdb, за допомогою якої можна
здійснити перехід в каталог ~kofler/linuxbuch.
Виклики команди alias можна застосовувати і у вигляді вкладень. Зверніть
увагу на те, що скорочення alias мають пріоритет над однойменними командами.
Цю властивість можна використовувати для того, щоб перешкодити
небажаному виклику команди:
user$ alias more=less
Тепер при будь-якій спробі виконати команду more запускається потужна
програма less. Якщо ж з якихось причин знову знадобиться команда more, буде
потрібно вказати шлях до неї повністю (/bin/more) або поставити перед нею
зворотний слеш (\more). В такому випадку він перешкоджає інтерпретації
псевдоніма.
Скорочення alias можна знову видаляти за допомогою unalias. В іншому
випадку скорочення залишаються дійсними до того, як користувач покине
оболонку. Якщо потрібно залишити будь-які скорочення на постійній основі, слід
задати команди alias в файлах /etc/bashrc і ~/.bashrc в домашньому каталозі
користувача.
У багатьох дистрибутивах деякі скорочення псевдонімів задаються за
замовчуванням. Наприклад, якщо весь час надходить запит від rm щодо того, чи
слід видалити файл, це зазвичай пов'язане з заданим псевдонімом rm=rm -i.
Список всіх псевдонімів, дійсних зараз, повертає команда alias. У наступних
рядках показано, в яких каталогах дистрибутивів Debian, Fedora, SUSE і Ubuntu
розташовуються визначення псевдонімів.
Debian Fedora, Ubuntu: /etc/bashrc /etc/profile.d/*.sh ~/.bashrc
SUSE: /etc/bash.bashrc /etc/profile.d/*.sh ~/.bashrc ~/.alias
4
1.1.3. Механізми підстановки
Термін «механізм підстановки» здається дуже абстрактним і складним.
Основна ідея полягає в тому, що команди, утворені з застосуванням спеціальних
символів, замінюються їх результатами. У найпростішому випадку це означає:
при інтерпретації команди ls *.tex послідовність символів *.tex замінюється
списком відповідних файлів, а саме (наприклад): file1.tex, file2.tex.
Мета цього розділу коротко описати найважливіші механізми,
використовувані при інтерпретації команд (табл. 1), а саме: джокерні символи, що
застосовуються для побудови імен файлів, фігурні дужки для об'єднання
послідовностей символів, квадратні дужки для обчислення виразів, що містяться в
арифметичних дужках, зворотні апострофи для підстановки команд і т. д.
5
В якості джокерних символів використовуються ? (що означає будь-який
символ) і * (що означає будь-яку кількість будь-яких символів, в тому числі
жодного). Послідовність символів [a,b,e-h]* означає файли, імена яких
починаються з a, b, e, f, g або h. Якщо перший символ, зазначений в квадратних
дужках, це ^ або !, то допустимі всі символи, крім зазначених у дужках. Символ ~
можна використовувати в якості скороченої назви домашнього каталогу.
Функції спеціальних символів можна протестувати за допомогою наступної
команди echo. Перша команда повертає всі файли і каталоги, що знаходяться в
кореневому каталозі. Друга команда обмежує вивід файлами і каталогами, імена
яких починаються з літер від a до f.
user$ echo /*
/bin /boot /dev /etc /home /lib /lost+found /media /misc /mnt /net /opt
/proc /root /sbin /selinux /srv /sys /tmp /usr /var
user$ echo /[a-f]*
/bin /boot /dev /etc
Оскільки за формування імен файлів відповідає не конкретна програма, а
оболонка bash, результати можуть виглядати інакше, ніж очікує користувач.
Так, ls * може повернути практично нескінченний список файлів, навіть
якщо в поточному каталозі їх всього кілька. Команда ls після доповнення за
допомогою * поверне список всіх файлів і каталогів. Крім того, ls відображає не
тільки імена каталогів, а й їх вміст! Якщо необхідно отримати простий список
всіх файлів і каталогів, використовуйте параметр -d. Він забезпечує те, що вміст
каталогів, що задаються в рядку параметрів, окремо відображатися не буде.
Якщо необхідно забезпечити зворотний зв'язок з системою і відслідковувати
внутрішнє функціонування bash, можете виконати команду set -x. Тоді bash буде
відображати виконання всіх команд по мірі їх інтерпретації в командному рядку
(з будь-якими параметрами, які можна передавати команді і з доповнюваними
іменами файлів).
За замовчуванням * не враховує файлів і каталогів, імена яких починаються
з крапки (іншими словами, прихованих). Якщо потрібний такий ефект, необхідно
скористатися bash-параметром dotglob:
user$ shopt -s dotglob
user$ echo *
...
user$ shopt -u dotglob (dotglob знову деактивований)
Формування імен файлів за допомогою **. Починаючи з версії 4.0,
поєднання символів ** рекурсивно охоплює файли і каталоги. З міркувань
сумісності ця нова функція за замовчуванням деактивована. Якщо необхідно нею
скористатися (наприклад, в сценарії), слід встановити параметр bash globstar за
допомогою shopt –s.
6
user$ shopt -s globstar
user$ echo **
Формування послідовностей символів за допомогою {}. З послідовностей
символів, вкладених у фігурні дужки, bash утворює будь-які послідовності
символів. Офіційна назва такого механізму підстановки – розкриття дужок. Вираз
part{1,2a, 2b} означає part1 part2a part2b. Користуючись розкриттям дужок, можна
полегшити роботу, якщо необхідно звернутися до багатьох файлів і каталогів зі
схожими іменами. У порівнянні з джокерними символами * і ? є певна перевага –
можна утворювати імена ще не існуючих файлів (це стосується, наприклад,
mkdir).
user$ echo {a,b}{1,2,3}
a1 a2 a3 b1 b2 b3
user$ echo {ab,cd}{123,456,789}-{I,II}
ab123-I ab123-II ab456-I ab456-II ab789-I ab789-II
cd123-I cd123-II cd456-I cd456-II cd789-I cd789-II
Перечислення можна оформляти у вигляді {a..b}, причому a і b, можуть
бути як буквами, так і числами. Наступні приклади пояснюють принцип роботи
цієї функції:
user$ echo {1..5}
12345
user$ echo {z..t}
zyxwvut
Обчислення арифметичних виразів за допомогою []. Зазвичай в bash не
можна здійснювати обчислення. Якщо написати 2 + 3, то оболонка «не зрозуміє»,
що робити з цим виразом. Якщо необхідно обчислювати, працюючи з оболонкою,
потрібно вставити вираз в квадратні дужки і поставити перед ними символ $:
user$ echo $[2+3]
5
У квадратних дужках можна використовувати більшість операторів,
відомих з мови програмування С: +, -, *, / для чотирьох основних арифметичних
операцій, % для обчислень по модулю, == ,! =, <, <=,> і > = для порівнянь, << і >>
для зсувів бітів, !, && і || для логічних операторів NO, AND та OR і т. д.
Всі обчислення виконуються з 32-бітними цілими числами (діапазон чисел:
± 2 147 483 648). Якщо слід витягти окремі значення з змінних, перед змінними
необхідно ставити знак $.
Є ще один спосіб здійснювати обчислення – за допомогою команди expr. Це
самостійна команда Linux, що працює незалежно від bash.
7
Підстановка команд. Користуючись підстановкою команд, можна замінити
команду в командному рядку результатом цієї команди. Для цього команда
повинна бути вкладена між двома символами `. Альтернативний запис -
$(команда).
Другий метод кращий, тому що, по-перше, в такому випадку уникається
плутанина з трьома різними лапками ( " ‘ і `), по-друге, другий метод допускає
вкладення.
Позначена таким чином команда буде замінена результатом її виконання.
Подібний запис забезпечує вкладений виклик декількох команд, причому одна
команда передає результат свого виконання іншій. Дві представлені далі
рівнозначні команди прояснюють принцип роботи цього механізму:
user$ ls -lgo `find /usr/share -name '*README*'`
user$ ls -lgo $(find /usr/share -name '*README*')
Вищевказана команда спочатку виконує find /usr/share -name '*README*'.
Результат виконання цієї команди список всіх файлів, що знаходяться в
каталозі /usr/share і містять послідовність символів README. Тепер цей список
вставляється в командний рядок на місці команди find. Тоді командний рядок
може записуватися наступним чином:
user$ ls -lgo /usr/share/a2ps/ppd/README \
> /usr/share/a2ps/README
Результатом цієї команди є наступний вивід:
-rw-r--r-- 1 301 15. Feb 12:30 /usr/share/a2ps/ppd/README
-rw-r--r-- 1 1029 15. Feb 12:30 /usr/share/a2ps/README
...
Отримати такий результат, використовуючи звичайний програмний канал з
символом |, не вдасться. Команда ls не очікує ніякого стандартного введення, а
також ігнорує інформацію, передану find через програмний канал. І саме тому
наступна команда відображає тільки вміст поточного каталогу. Результати
пошуку виводитися не будуть!
user$ find /usr/share -name '*README*' | ls -l (не працює)
Є ще одне рішення, що дозволяє обійтися без підстановки команд: за
допомогою команди xargs дані стандартного введення передаються зазначеній
команді:
user$ find /usr/share -name '*README*' | xargs ls –l
Важлива перевага xargs полягає в тому, що обсяг даних, які можна
переробити, нічим не обмежений. При необхідності xargs викликає команду
неодноразово і передає ці дані в стандартний ввід в декілька етапів. Навпаки, при
підстановці команд максимальна довжина командного рядка обмежена, як
правило, кількома тисячами символів.
8
Якщо в іменах файлів містяться пропуски, передача таких імен може
викликати труднощі. Щоб уникнути цих проблем, передайте команді find
параметр -print0, а команді xargs – параметр -null. Наступна команда ставить для
всіх каталогів біт exucute:
user$ find -type d -print0 | xargs --null chmod a+x
Спеціальні символи в послідовностях. Оскільки в bash практично будь-
який символ, за винятком букв і цифр, має спеціальне значення, виявляється
неможливо використовувати такі знаки в послідовності символів і іменах файлів.
Ця проблема вирішується двома способами. Можна поставити перед спеціальним
символом зворотний слеш (\) або вставити всю послідовність символів в
апострофи або лапки. Вказавши апострофи, ви можете, наприклад, видалити файл
з ім'ям ab* $cd:
user$ rm 'ab* $cd'
Зверніть увагу: символ ' використовується для позначення послідовностей
символів, а ` - для підстановки команд. Ці символи не рівнозначні! Лапки
працюють майже так само, як і апострофи. У будь-якому випадку вони
накладають менше обмежень і дозволяють використовувати деякі спеціальні
символи ($, \ і `). Оскільки послідовність символів є в лапках, інтерпретуються
змінні оболонки, перед якими стоїть символ $:
user$ echo "This is the access path: $PATH"
Команда повертає в якості результату послідовність символів This is the
acсess path, за якою слідує вміст змінної оболонки – PATH.
Якщо застосувати не лапки, а звичайні апострофи, то вся послідовність
символів буде передана через echo в незмінному вигляді.
13
Отже, тепер у змінній PATH зберігається її колишній вміст, двокрапка і
результат виконання команди pwd (остання частина зберігається завдяки
підстановці команд). Наступний контрольний прогін показує, що вміст змінної
PATH поточної оболонки зміниться лише тоді, коли перед командою addpwd буде
встановлено крапку (в командному підпроцесорі, що запускається при першому
зверненні до addpwd, PATH також змінюється, але ці зміни діють, поки
виконується addpwd).
user$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
user$ addpwd
user$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
user$ . addpwd
user$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user
14
Змінну $? можна використовувати для визначення умов, щоб змінити
подальше виконання програми в залежність від результату останньої команди. В
принципі команду можна прямо задати як умову, вказавши її таким чином в if.
Змінна $$ містить PID (ідентифікаційний номер процесу). Це числове
значення застосовується всередині системи Linux для управління процесами. PID
є унікальним, тобто у всій системі гарантовано відсутній інший процес з таким
самим номером, тому таке значення добре підходить для створення тимчасового
файлу. Наприклад, за допомогою ls > tmp.$$ можна зберегти список всіх файлів у
файлі tmp.nnn. Навіть якщо такий самий пакетний файл одночасно працює на
іншому терміналі, у двох оболонках процеси будуть мати різні ідентифікаційні
номери, що виключає виникнення конфлікту на рівні імен.
1.2.3. Масиви
Окрім звичайних змінних, в bash також можна застосовувати масиви.
Зверніть увагу, що синтаксис для доступу до n-ого елементу відрізняється від
синтаксису, прийнятого в С.
x = () # Визначення порожнього масиву
x[0]='a' # Присвоєння елементів масиву
x[1]='b'
x[2]='c'
x=('a' 'b' 'c') # Короткий варіант запису чотирьох попередніх рядків
echo ${x[1]} # Зчитування елемента масиву
echo ${x[@]} # Зчитування всіх елементів масиву
Для програмістів виключно важливі масиви асоціативних елементів, які
стали підтримуватися в bash, починаючи з версії 4.0. Потрібно пам’ятати, що
масив спочатку потрібно спеціально оголосити як асоціативний за допомогою
declare -A. В іншому випадку система вважатиме, що це звичайний масив. Тоді
послідовності символів, що містяться в індексі, будуть інтерпретовані як 0, тому
вийде звичайний масив, що складається з одного-єдиного елемента (Index 0).
declare -A y #Визначення порожнього масиву асоціативних елементів
y[abc]=123 #Присвоєння елемента асоціативного масиву
y[efg]=xxx
y=( [abc]=123 [efg]=xxx ) # Короткий варіант запису двох попередніх рядків
echo ${y [abc]} # Зчитування одного елемента масиву
Ще одне важливе нововведення версії 4 полягає в тому, що за допомогою
команди mapfile можна порядково перетворити текстовий файл в елементи
звичайного масиву:
mapfile z < текстовий_файл
15
1.2.4. Зчитування змінних за допомогою read
За допомогою bash-команди read можна обробляти ввід користувача. Як
правило, для цього спочатку за допомогою echo задається короткий текст, який
повідомляє користувачеві, який ввід очікується (наприклад, y/n, числове значення
і т. п.). При цьому доцільно використовувати параметр -n, що дозволяє вводити
дані відразу ж після тексту echo, а не з наступного рядка. При виконанні
наступної команди read, bash очікує від користувача вводу рядка і натискання
клавіші Enter.
Візьмемо програму, в якій цикл while виконується до тих пір, поки у змінній
a не опиниться послідовність символів, яка задовольняє певним умовам. У
наступному прикладі ми бачимо, як працює ця програма:
user$ readvar
Введіть число: a
Невірно, повторіть ввід, будь ласка
Введіть число: 12
12
Після вводу інформації за допомогою read весь вміст змінної видаляється за
допомогою підстановки параметрів, якщо послідовність включає будь-які
символи, крім цифр, знаків «мінус» та пробілів. Правда, ця система контролю не
ідеальна (відповідно до неї допускається як послідовність символів 12-34-5, так і
12 34), але все ж дуже ефективна.
#! /bin/sh
# Приклад readvar: зчитування числового значення
a= # Видалення вмісту змінної а
while [ -z "$a" ]; do
echo -n "Введіть число: "
read a a=${a##*[^0-9, ' ', -]*} # Видалення послідовностей символів
# які містять будь які символи крім 0–9,
# знаку мінус та пробілу
if [ -z "$a" ]; then
echo " Невірно, повторіть ввід, будь ласка "
fi
done
echo $a
16
1.2.5. Умовні переходи та цикли в сценаріях bash
Умовні переходи в програмах оболонки створюються за допомогою команд
if і case. У той час як if краще підходить для звичайних операцій вибору, case
призначений для аналізу послідовностей символів (зіставлення зразків).
Умовні переходи if
У файлі iftst за допомогою if-запиту перевіряється, чи були передані два
параметри. Якщо цього не сталося, виводиться повідомлення про помилку.
Програма завершується командою exit і повертає значення нерівне нулю
(індикатор помилок). В іншому випадку вміст обох параметрів виводиться на
екран.
#! /bin/sh
# Приклад iftst
if test $# -ne 2; then
echo "Команді має бути передано рівно два параметри!"
exit 1
else
echo "Параметр 1: $1, Параметр 2: $2"
fi
Короткий тестовий запуск показує, як працює програма:
user$ iftst a
Команді має бути передано два параметри!
user$ iftst a b
Параметр 1: a, Параметр 2: b
17
Попередню програму можна було сформулювати інакше: замість test можна
використати короткий варіант в квадратних дужках. При цьому перед назвою
команди [ і після неї ] потрібно ставити пробіл.
Крім того, із структури if можна виокремити іншу команду echo, оскільки
через наявність команди exit всі рядки коду, що йдуть після fi, будуть
виконуватися тільки після того, як буде виконано умову.
#! /bin/sh
# Приклад iftst, 2. варіант
if [ $# -ne 2 ]; then
echo " Команді потрібно передати два параметри!"
exit 1
fi
echo "Параметр 1: $1, Параметр 2: $2"
18
user$ a=20
user$ test $a - eq 20; echo $?
0
user$ test $a - gt 20; echo $?
1
Умовні переходи Case
Конструкції сase вводяться ключовим словом сase, за яким слідує параметр,
призначений для аналізу (зазвичай це змінна). Після ключового слова in можна
вказати кілька можливих шаблонів рядка, з якими буде порівнюватися параметр.
При цьому можуть використовуватися ті ж джокерні символи, що і при роботі з
іменами файлів. Шаблон завершується круглою дужкою, тобто, наприклад, --*).
Це робиться для розпізнавання таких послідовностей, які починаються з двох
знаків «мінус». Кілька шаблонів можна відокремлювати один від одного
символом |. У такому випадку перевіряються обидва шаблони. Наприклад, * .c | *
.h) служить для розпізнавання файлів * .c і * .h в одному і тому ж розгалуженні
програми.
Команди, що йдуть після дужок, повинні завершуватися двома крапками з
комою. Якщо буде потрібно перехід else, то в якості останнього шаблону
необхідно вказати * – такому шаблону будуть відповідати всі послідовності
символів. При обробці конструкції з сase враховується тільки перший перехід, в
якому параметр відповідає зазначеному шаблону.
У наступному прикладі casetst показано застосування сase для класифікації
переданих параметрів на імена файлів. Цикл для змінної і виконується з усіма
параметрами, переданими файлу оболонки. У цьому циклі кожен окремий
параметр аналізується за допомогою сase. Якщо параметр починається з дефісу
(-), то він знаходиться в кінці змінної OPT, в іншому випадку в кінці DAT.
#! /bin/sh
# Приклад casetst
opt= # Видалення opt і dat
dat=
for i do # Цикл для всіх переданих параметрів
case "$i" in
-* ) opt="$opt $i";;
* ) dat="$dat $i";;
esac
done # Кінець циклу
echo "Options: $opt"
19
echo "Files: $dat"
Тестовий запуск файлу оболонки на практиці показує, як працює цей
простий оператор вибору. Параметри, передані по порядку без сортування,
поділяються на імена файлів і параметри:
user$ casetst -x -y dat1 dat2 -z dat3
Options: -x -y - z
Files: dat1 dat2 dat3
21
вищевказаному циклу while. При цьому для формулювання умови і > 5
застосовується оператор -gt (більше).
user$ i=1; until [ $i - gt 5 ]; do echo $i; i=$[$i+1]; done
1
2
3
4
5
echo
read -p "Виконати пункт: " choice
case $choice in
1)
read -p "Введіть назву директорії 1-го рівня: " DIR1
read -p "Введіть назву директорії 2-го рівня: " DIR2
read -p "Введіть назву директорії 3-го рівня: " DIR3
Результати виконання
user@localhost:$> my_script txt ~
Виконати пункт: 1
Введіть назву директорії 1-го рівня: A
Введіть назву директорії 2-го рівня: B
Введіть назву директорії 3-го рівня: C
mkdir: created directory 'A'
mkdir: created directory 'A/B'
mkdir: created directory 'A/B/C'
A:
total 4
drwxr-xr-x 1 user users 26 кві 3 16:26 B
-rw-r--r-- 1 user users 24 кві 3 16:26 file_of_dir1
A/B:
total 4
drwxr-xr-x 1 user users 24 кві 3 16:26 C
-rw-r--r-- 1 user users 24 кві 3 16:26 file_of_dir2
A/B/C:
total 4
-rw-r--r-- 1 user users 24 кві 3 16:26 file_of_dir3
23
Виконати пункт: 2
Скопіювати в: A/B
'/home/user/file1.txt' -> 'A/B/file1.txt'
'/home/user/file2.txt' -> 'A/B/file2.txt'
'/home/user/file3.txt' -> 'A/B/file3.txt'
Виконати пункт: 3
Some text File 1
Some text File 2
Some text File 3
%%%% Підсумковий файл res_file записано %%%%
Виконати пункт: 4
Вибрано неправильний пункт!
Виконати пункт: q
№
Завдання
вар
Написати командний файл, який реалізує меню з трьох пунктів: перший пункт – дає
можливість користувачу вказати розширення файлу та каталог, другий пункт – створює
1 резервні копії всіх файлів з даним розширенням у вказаному каталозі, третій пункт –
рахує кількість файлів з заданим розширенням і записує їх число у файл.
Реалізувати командний файл, який в якості аргументу прийматиме число, що не
повинно виходити за рамки діапазону 0 – 10 (якщо число не в заданому діапазоні,
2 виводиться повідомлення про помилку) і розраховує відповідний член послідовності
Фібоначчі.
Написати командний файл, який реалізує меню з трьох пунктів, перший пункт – дає
3 можливість користувачу вказати назву директорії, обравши другий пункт користувач
отримує список всіх файлів в цьому каталозі, обравши третій пункт користувач
24
отримує список всіх підкаталогів цього каталогу. При виборі другого або третього
пункту в домашній директорії користувача створюється файл у який записується
кількість файлів чи підкаталогів відповідно.
Створити командний файл, який реалізує меню з двома пунктами: перший пункт
здійснює пошук заданої послідовності символів у текстовому файлі, другий пункт
здійснюватиме пошук заданої стрічки у бінарному файлі. Послідовність символів, яку
4 необхідно знайти і файл, в якому здійснюватиметься пошук, вказуються в якості
аргументів при запуску командного файлу. Здійснити перевірку чи існує заданий файл і
чи параметри передані коректно.
Створити командний файл, який реалізує меню з трьома пунктами: перший пункт –
реалізує зчитування з клавіатури послідовності символів, другий пункт – виводить
5 список файлів в назві яких є один із символів вказаних при виклику пункту 1, третій
пункт – видаляє файли в назві яких є один із символів вказаних при виклику пункту 1.
Написати командний файл, який реалізує меню з трьох пунктів: перший пункт –
вивести всіх користувачів, що в даний час працюють в системі; Другий пункт - послати
6 повідомлення користувачу, ім'я користувача, термінал і повідомлення вводяться з
клавіатури; Третій пункт - завершення.
Реалізувати командний файл, що дозволяє користувачу в циклі посилати всім активним
користувачам на всі відкриті термінали повідомлення або вказати номер конкретного
7 терміналу і відправити повідомлення лише на нього. Повідомлення вводиться з
клавіатури. Командний файл при старті виводить ім'я комп'ютера, ім'я користувача, що
запустив командний файл, тип операційної системи, IP-адресу машини.
Написати командний файл, що реалізує символьне меню. Перший пункт: робота з
інформаційними командами (реалізувати всі основні інформаційні команди). Другий
пункт повинен здійснювати копіювання файлів: у цьому пункті виводиться інформація
8 про вміст поточного каталогу, далі пропонується інтерфейс копіювання файлу:
введення імені файлу і введення каталогу для копіювання. Після виконання пункту
виводиться вміст каталогу, куди був скопійований файл і виводиться вміст
скопійованого файлу. Третій пункт: вихід.
Написати командний файл, що здійснює пошук однакових по їх вмісту файлів у двох
каталогах, наприклад, Dir1 і Dir2. Користувач задає імена Dir1 і Dir2 в якості першого і
другого аргументу командного рядка. В результаті роботи файли, наявні в Dir1,
9 порівнюються з файлами в Dir2 по їх вмісту. На екран виводяться кількість
переглянутих файлів і результати порівняння. Реалізувати пункт меню, який дозволить
користувачу видаляти файли з однаковим вмістом.
Написати командний файл, який реалізує меню з трьох пунктів: перший пункт – дає
можливість користувачу вказати розширення файлу та каталог, другий пункт –
10 переміщає всі файли з даним розширенням у вказаний каталог з одночасним
перейменуванням з приставкою new_, третій пункт – виводить основні атрибути файлів
з заданим розширенням і записує їх у файл.
Реалізувати командний файл, який в якості аргументу прийматиме число, що не
повинно виходити за рамки діапазону 0 – 9 (якщо число не в заданому діапазоні,
11 виводиться повідомлення про помилку) і розраховує суму усіх чисел з діапазону
вказаного числа.
Написати командний файл, який реалізує меню з трьох пунктів, перший пункт – дає
можливість користувачу вказати назву директорії та розширення файлу, обравши
12 другий пункт користувач отримує список всіх файлів в цьому каталозі з заданим
розширенням, обравши третій пункт користувач отримує список всіх підкаталогів та
25
файлів без вказаного розширення. При виборі другого або третього пункту в домашній
директорії користувача створюється файл у який записується розширений перелік
файлів з відповідним розширенням або без нього.
Створити командний файл, який реалізує меню з двома пунктами: перший пункт
здійснює пошук файлів з певною символьною послідовністю у назві, другий пункт
здійснюватиме пошук каталогів з цією послідовнстю у назві. Послідовність символів і
13 каталог, в якому здійснюватиметься пошук, вказуються в якості аргументів при запуску
командного файлу. Здійснити перевірку чи існує заданий каталог і чи параметри
передані коректно.
Створити командний файл, який реалізує меню з трьома пунктами: перший пункт –
реалізує зчитування з клавіатури послідовності символів, другий пункт – виводить
14 список файлів в тексті яких є один із символів вказаних при виклику пункту 1, третій
пункт – копіює файли в тексті яких є один із символів вказаних при виклику пункту 1 в
окремий каталог.
Написати командний файл, який реалізує меню з трьох пунктів: перший пункт –
вивести календар на наступний місяць (програма сама повинна визначати поточний
15 місяць); Другий пункт – записати інформацію про ім’я комп'ютера, тип ОС, активних
користувачів, системну дату та час в файл (ім'я файлу повинно вводитися з клавіатури);
Третій пункт - завершення.
Реалізувати командний файл, що дозволяє користувачу в циклі робити записи
повідомлень у текстовий файл або очистити його вміст. Повідомлення вводиться з
16 клавіатури, перед записом тексту у файл програма повинна вставляти поточний час.
Ім'я файлу вводиться як параметр скрипта. Командний файл при старті виводить ім'я
комп'ютера, ім'я користувача, що запустив командний файл, тип операційної системи.
Написати командний файл, що реалізує символьне меню. Перший пункт: вивести
системний час, ім'я поточного користувача, тип ОС, шлях до поточного каталогу.
Другий пункт повинен здійснювати перейменування файлів: у цьому пункті виводиться
17 інформація про вміст поточного каталогу, далі пропонується інтерфейс
перейменування файлу: введення імені поточного файлу і його нове ім'я. Після
виконання пункту виводяться основні атрибути перейменованого файлу. Третій пункт :
вихід.
Написати командний файл, що здійснює пошук порожніх файлів у певному каталозі (і
його підкаталогах). Користувач задає ім'я каталогу для пошуку як параметр командного
18 рядка. На екран виводяться загальна кількість переглянутих файлів і результати
пошуку.
Написати командний файл, який реалізує меню з трьох пунктів: перший пункт – дає
можливість користувачу вказати частину імені файлу та каталог, другий пункт –
19 здійснює пошук файлів у вказаному каталозі за частиною імені, третій пункт –
відображає основні атрибути доступу до файлів (якщо вони є у заданому каталозі).
Реалізувати командний файл, який в якості аргументу прийматиме число, що не
повинно виходити за рамки діапазону 0 – 15 (якщо число не в заданому діапазоні,
20 виводиться повідомлення про помилку) і розраховує суму квадратів усіх чисел в
діапазоні цього числа.
Написати командний файл, який реалізує меню з трьох пунктів, перший пункт – дає
можливість користувачу вказати назву директорії, обравши другий пункт користувач
отримує запит на введення розширення файлу, а потім список всіх файлів з заданим
21 розширенням в цьому каталозі (якщо вони є, в іншому випадку повідомлення про
відсутність таких файлів), обравши третій пункт користувач отримує можливість
скопіювати ці файли в окремий каталог. Назва каталогу вводиться користувачем.
26
Створити командний файл, який реалізує меню з двома пунктами: перший пункт
здійснює підрахунок символів у текстовому файлі, другий пункт –рядків у заданому
файлі. Контрольна кількість символів і рядків та файл, в якому здійснюватиметься
22 пошук, вказуються в якості аргументів при запуску командного файлу. Якщо кількість
слів або рядків у файлі не перевищує контрольної кількості замість результату
підрахунку виводиться попередження. Здійснити перевірку чи існує заданий файл і чи
параметри передані коректно.
Створити командний файл, який реалізує меню з трьома пунктами: перший пункт –
реалізує зчитування з клавіатури послідовності символів, другий пункт – виводить
23 список файлів в назві яких відсутні символи вказані при виклику пункту 1, третій пункт
– переміщає файли в назві яких є один із символів вказаних при виклику пункту 1
(каталог для переміщення вказується користувачем).
Написати командний файл, який реалізує меню з трьох пунктів: перший пункт –
вивести всіх користувачів, що в даний час працюють в системі; Другий пункт – змінити
пароль поточного користувача, ім'я користувача, попередній і новий пароль вводяться з
24 клавіатури. Паралельно старий пароль записати у файл; Третій пункт – автоматично
відновити попередній пароль з даних файлу. У разі успішного відновлення паролю
вивести повідомлення про це.
Реалізувати командний файл, що дозволяє користувачу в циклі додавати до змінної
середовища PATH новий шлях. Новий шлях вводиться з клавіатури. Командний файл
25 при старті виводить ім'я комп'ютера, ім'я користувача та поточне значення змінної
PATH. В скрипті передбачити можливість для перевірки значення змінної PATH.
Написати командний файл, що реалізує символьне меню. Перший пункт: Створити
локальну змінну і присвоїти їй порожнє значення. Ім'я змінної вводити через термінал.
Другий пункт повинен здійснювати пошук файлів у кореневому каталозі (/) за заданим
26 шаблоном. Шаблон повинен вводитися користувачем з терміналу. Третій пункт: додати
до значення локальної змінної повний шлях до каталогу в якому знаходиться перший
знайдений файл. В якості розділювача використати символ “;”
Написати командний файл, що здійснює пошук файлів в тексті яких зустрічається
певна символьна послідовність. Користувач задає символьну послідовність та каталог в
27 якому здійснюється пошук в якості першого і другого аргументу командного рядка. В
результаті роботи на екран виводяться кількість переглянутих файлів і перелік імен
знайдених файлів.
Написати командний файл, який реалізує меню з трьох пунктів: перший пункт – дає
можливість користувачу вивести перелік локальних змінних оболонки, другий пункт –
28 обчислити суму, добуток та різницю двох цілих чисел введених користувачем. У разі
введення інших значень (або нечислових символів) вивести попередження, третій
пункт – очистити значення локальних змінних.
3. ЗМІСТ ЗВІТУ
Звіт повинен містити:
мету роботи, завдання (варіант студента);
текст командного файлу;
результати його виконання;
висновки.
27
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.
28
Довідка щодо найважливіших спеціальних символів bash
Символ Значення
29
>& Переадресація стандарт. виводу і помилок (відповідає &>)
30
НАВЧАЛЬНЕ ВИДАННЯ
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи №3
з дисципліни «Операційні системи»
для студентів спеціальності 125 «Кібербезпека»,
спеціалізації «Безпека інформаційних і комунікаційних систем»
31