Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 15

2 Лабораторна робота 2.

Знайомство з FreeBSD
Метою роботи є знайомство з роботою у FreeBSD та вивчення основних команд FreeBSD.

2.1 Командний інтерпретатор


2.1.1 Як працює командний інтерпретатор
Філософія розробки UNIX систем за майже 40 років зробили командний рядок найпотужнішим
засобом управління операційною системою. На відміну від графічного інтерфейсу, який знайомий Вам
за операційними системами сімейства Windows, вона дозволяє швидше віддавати команди на різні дії,
повністю контролювати процес їх виконання, а також здійснює інтеграцію додатків у єдине ціле,
надаючи своєрідний інтерфейс для них.
Командний інтерпретатор є інтерфейсом до UNIX. Фактично це програмний рівень, який надає
середовище для введення команд, забезпечуючи цим взаємодію між користувачем і ядром операційної
системи. Командний інтерпретатор перетворює мову зрозумілу людині, на команди зрозумілі ядру.
Існує безліч командних інтерпретаторів, розрахованих на різні завдання.
2.1.2 Огляд та опис командних інтерпретаторів
sh (Командний інтерпретатор Bourne)
Стандартний інтерпретатор повністю відповідає стандарту POSIX(1). У FreeBSD цей
інтерпретатор є стандартним інтерпретатором для користувача операційної системи. Ви вже з ним
працювали, коли на попередній лабі вводили команди до командного рядка. sh не зручний для
інтерактивного використання, але ідеальний для програмування мовою командного інтерпретатора (sh-
програмування). Оскільки цей інтерпретатор є вихідним для всіх інших, ви можете бути впевнені, що
Ваша програма, написана на sh, буде працювати в будь-якому іншому POSIX-сумісному інтерпретаторі.
csh
Покращена версія sh. Був створений для заміни sh при інтерактивному використанні. Має безліч
доповнень, як управління завданнями, історія команд, додані файли сценаріїв виходу із системи тощо.
Згодом був визнаний найневдалішим для створення сценаріїв. У FreeBSD цей інтерпретатор є
стандартним для користувача root. Ви теж їх вже користували, коли виконували команди від root'a. В
даний момент замінений на tcsh, а csh є лише посиланням на tcsh для забезпечення сумісності.
bash
Дуже легкий у використанні та досить потужний командний інтерпретатор. Є стандартним для
операційних систем GNU/Linux. З нього ми й розпочнемо вивчення командного рядка.
zsh
Найпотужніший командний інтерпретатор з усіх, що були винайдені. Можливості з
автоматизації, автодоповнення, засобів пошуку та вгадування дій користувача дозволяють перейти на
новий рівень спілкування з операційною системою. Це певною мірою і є його мінусом, оскільки в
налаштуваннях за умовчанням він злегка програє bash, а для того, щоб він виявив всю свою міць,
необхідне довге вивчення його функцій і постійне підстроювання під конкретного користувача.
ksh/pdksh
Дуже схожий на csh, але є кілька додаткових функцій, як, наприклад, редагування команд з
історії за допомогою команд текстових редакторів vi та emacs. Також є розвинена підтримка гарячих
кнопок.
Після того, як ви ввійшли в систему, Ви потрапляєте в командний інтерпретатор sh. Щоб
працювати з інтерпретатором bash, можна набрати команду bash і (зрозуміло, якщо bash встановлений)
Ви відразу побачите, як змінилося запрошення командного рядка. У налаштуваннях за умовчанням bash
вказує ім'я користувача, а також шлях, яким користувач. Це запрошення не зовсім зручне, але пізніше
його змінимо. Відразу ж можна подивитися найпопулярнішу функцію bash'у, якої немає в sh.
Це автодоповнення команд та шляхів. Наприклад, набравши кілька літер початку команди,
можна натиснути Tab ( ) і bash доповнить команду або (ще раз натиснути ) запропонує на вибір
можливі варіанти. Так само доповнюються шляхи до файлів. Рекомендується запам'ятати цю
особливість і частіше використовувати. Це дозволить Вам швидше працювати із системою, а також
позбавить помилок при наборі. bash не вміє доповнювати опції всіх команд за замовчуванням, проте,
найчастіше разом із програмами їх розробники надають конфігурації для модуля автодоповнення bash.
Оскільки не дуже зручно щоразу при вході в систему вручну запускати bash і нерозумно ставити
його в скрипт login (аналог автозапуску у windows - при вході в систему, перш за все виконуються всі
команди в цьому файлі), то ми зробимо його інтерпретатором за умовчанням для нашого користувача.
Список командних інтерпретаторів зберігається у файлі /etc/shells. Набравши команду cat
/etc/shells, ви побачите список встановлених інтерпретаторів та шляхи до них.

Рис. 21 - Файл /etc/shells

У файлі /etc/passwd знаходиться список користувачів, а також встановлені для них командні
інтерпретатори за промовчанням. Набравши команду cat /etc/passwd (не забуваємо про
автодоповнення), ви побачите цей файл на екрані. У самому верху Ви можете побачити користувача root
у якого стоїть /bin/сsh, а в самому низу - користувача зі своїм ім'ям, у якого стоїть /bin/sh. Ви також
можете побачити купу інших "користувачів" (службових облікових записів), у яких стоїть як оболонка
nologin. Це означає, що вони не можуть увійти до системи.

Рис. 22 - Файл /etc/passwd


2.1.3 Зміна інтерпретатора за умовчанням
Зміна стандартного інтепретатора здійснюється за допомогою команди chsh (change shell -
змінити оболонку). Після введення цієї команди, запуститься текстовий редактор vi, в якому відкриється
файл з інформацією про користувача. На другому рядку вказано шлях, яким знаходиться інтерпретатор,
який встановлено за умовчанням для Вашого користувача. Згідно з інформацією у файлі /etc/shells, bash
знаходиться за адресою /usr/local/bin/bash (можна навіть просто запитати у системи "Де баш? " whereis
bash).
Оскільки з редактором vi ми ще не знайомі і початківцям з ним працювати складно, Вам
потрібно точно повторити наступні дії (у разі помилки натисніть Esc і наберіть :q! і Enter. Це скасує всі
зміни і вийде з редактора. Після чого Ви можете спробувати знову).
Використовуючи клавіші зі стрілками або клавіші h, j, k, l перенести курсор на першу літеру
слова bin, натиснути c (change) $ (до кінця рядка) та набрати /usr/local/bin/bash. Зовнішній вигляд файлу
має бути таким, як зазначено на мал. 23. Натисніть Esc, щоб вийти з режиму вставки. Тепер потрібно
зберегти файл набравши :w і вийти з редактора набравши :q і знову натиснувши Enter.

Рис. 23 - chsh

У вас запитають пароль для підтвердження того, що це саме Ви змінили свої параметри. Як
інтерпретатор можна використовувати будь-яку програму. Наприклад, задавши як інтерпретатор
/usr/bin/mail, єдиною доступною дією користувача буде читання пошти за допомогою програми mail.
У файлі /etc/passwd можна побачити, що Ваш інтерпретатор змінився.
Перевірте тепер, як змінилися Ваші налаштування. Наберіть exit (або Ctrl+d) для виходу із
запущеного bash і повернення в sh, а потім ще раз exit для того, щоб розлогінитися. Після наступної
автентифікації ви потрапите відразу до bash.

2.2 Основні команди та навігація по файловій системі


2.2.1 man – довідкова система
Перша та найголовніша команда, з якою Вам необхідно познайомитися, це команда man. У
FreeBSD включений великий набір довідкових посібників, у якому задокументовані всі команди та його
можливі опції. Для доступу до сторінки посібника використовується команда man ім'я_команди.
Наприклад, щоб прочитати довідку про команду man, введіть man man. Щоб дізнатися які дії виконує
команда, введіть man -f ім'я_команди. Щоб дізнатися яка команда виконує певні дії, наберіть man -k
ключове_слово. man -k шукає у довідці все, що пов'язане з ключовим словом, але потрібно навчитися
розуміти висновок цієї команди, який є досить заплутаним.
Сторінки довідки поділяються на кілька розділів:
1. User commands (Користувальницькі команди)
Інформація про такі команди, як ls, rm, cp або grep. До цього розділу доведеться звертатися
найчастіше під час роботи у FreeBSD.
2. System calls (Системні виклики)
Містить інформацію про різні API FreeBSD. Цей розділ призначений для програмістів на С
3. Subroutines (Процедури)
Тут міститься опис бібліотечних функцій. Вони призначені для програмістів на С
4. Devices (Пристрої)
Інформація для програмістів С про інтерфейси до драйверів пристроїв у FreeBSD.
5. File formats (Формати файлів)
Інформація про синтаксис та формати різних конфігураційних файлів.
6. Games (Ігри)
Найважливіший розділ довідкових посібників. Тут містяться інструкції до ігор та інших
розважальних засобів FreeBSD.
7. Miscellaneous (Різне)
Те, що не підходить для інших розділів, розміщено тут.
8. System administration (Системне адміністрування)
Містить інформацію про команди, призначені для адміністрування системи.
9. Kernel intefaces (Інтерфейси ядра)
Інформація для програмістів С про інтерфейс ядра.
Іноді потрібно вказувати бажання отримати довідку із певного розділу. Наприклад, команда crontab
(керування виконанням завдань за розкладом) представлена у розділі 1 (команда crontab) та розділі 5
(формат файлу crontab). Щоб явно вказати розділ, необхідно набрати man 5 crontab. Буде виведено
довідку щодо crontab саме з 5-го розділу.
Усі сторінки довідки з команд мають однакову структуру. Дуже корисними є розділи SYNOPSIS
та DESCRIPTION. У розділі SYNOPSIS показано синтаксис команди. Обов'язкові опції та значення
вказані без дужок (наприклад, для команди cp — копіювання, обов'язково потрібно вказати, що й куди
копіювати), необов'язкові опції та значення вказані у квадратних дужках. Деякі опції не можуть бути
вказані разом, тому вони розділені символом прямої межі. Змінні значення пофарбовані у світлий колір.
Для деяких складних команд у розділі EXAMPLES наведено приклади їх використання. У розділі FILES
знаходяться адреси файлів налаштувань команди, якщо вони є.
Довідкова система UNIX дуже корисна та зручна річ. При роботі із системою Вам часто
доведеться вдаватися до її послуг. Тому постарайтеся раніше звикнути до неї.
Для навігації сторінками довідки можна використовувати клавіші курсору, а для виходу
потрібно натиснути q.
Першу команду, довідку про яку має сенс подивитися – це сама команда man:
man man
При цьому варто з'ясувати, як здійснювати переміщення по сторінці, шукати слова, закривати довідку.
2.2.2 Навігація по файловій системі
Для виведення вмісту каталогу використовується команда ls (про неї та всіх наступних Ви
можете дізнатися докладніше на сторінках довідки man). Без опцій команда легко видає вміст поточного
каталогу. Якщо ви запустили її у своєму домашньому каталозі, то, швидше за все, ви не побачили
жодного файлу. Одна з найпопулярніших опцій -a. Ця опція змушує відображати приховані файли та
папки. Прихованим файл або папка стають у разі, якщо їхнє ім'я починається з точки.
Оскільки у списку, який видає ls, неможливо розрізнити тип файлу, то для цього можна
використовувати опцію -F. Наприклад, подивившись вміст каталогу /boot за допомогою команди ls -F
/boot, ми побачимо, що каталоги позначені /, виконувані файли *, а посилання - @. За допомогою опції -
G можна розфарбувати висновок за типами файлів. У UNIX системах файли не відрізняються
розширення. Розширення лише допоміжна функція для різних додатків.
Поскольку не очень удобно все время использовать полный путь к файлам, то возможен переход
по файловой системе с помощью команды cd (change directory). Ее синтаксис cd путь_к_каталогу.
Например, cd / переведет нас в корневой каталог cd /usr/local/bin в каталог bin который расположен в
каталоге local который находится в каталоге /usr. Для перехода на уровень выше можно использовать
cd .. . Если Вы потерялись и не знаете, где находитесь, то есть команда pwd, которая укажет Вам Ваше
место.
Для перехода в домашнюю директорию текущего пользователя можно использовать cd ~ (этот символ
называется «тильда»). А если вы хотите вернуться в предыдущую директорию, то cd - .
Оскільки не дуже зручно постійно використовувати повний шлях до файлів, то можливий
перехід по файловій системі за допомогою команди cd (change directory). Її синтаксис cd
шлях_до_каталогу. Наприклад, cd / переведе нас до кореневого каталогу, cd /usr/local/bin до каталогу
bin який розташований у каталозі local який знаходиться в каталозі /usr. Для переходу на рівень вище
можна використовувати cd .. . Якщо Ви загубилися і не знаєте, де знаходитесь, то є команда pwd, яка
вкаже Ваше місце. Для переходу до домашньої директорії поточного користувача можна
використовувати cd~ (цей символ називається «тильда»). А якщо ви хочете повернутися до попередньої
директорії, то cd - .

2.2.3 Структура файлової системи


Щоб розуміти, як працює операційна система FreeBSD, необхідно чітко уявляти, як вона керує файлами.
Важливо також і те, чим її методи відрізняються від методів інших операційних систем. Для
користувачів, які працювали з Windows, структура каталогів файлової системи FreeBSD здасться
таємничою. Як і в багатьох інших питаннях, пов'язаних з UNIX, коріння традиційної схеми іменування
каталогів губиться в далекому минулому.

Каталог Призначення
/ Коренева файлова система (файлова система root). Це верхній
розділ у ієрархії UNIX. Всі інші розділи підпорядковані йому,
навіть якщо вони знаходяться на інших дисках або інших
комп'ютерах.
/bin Тут знаходяться файли, що виконуються, скомпіловані зі
статичними бібліотеками
/boot Тут знаходяться файли конфігурації завантажувача, ядро
операційної системи, модулі до ядра та інші файли, необхідні
для завантаження операційної системи.
/cdrom Порожній каталог призначений для монтування приводу
оптичних дисків.
/dev Спеціальний каталог Файли всередині є пристроями. Точніше
файлами спеціальних типів, які забезпечують програм
інтерфейс до пристроїв, що підтримуються ядром.
/etc Тут зберігаються системні конфігураційні файли.
/home Посилання на каталог /usr/home створене з міркувань
сумісності.
/lib Основні бібліотеки та модулі ядра
/libexec Основні бібліотеки та модулі ядра
/media Порожній каталог призначений для монтування стандартних
накопичувачів інформації.
/mnt Порожній каталог призначений для монтування.
/proc Файлова система процесів (procfs). Вона є інтерфейс до таблиці
процесів.
/rescue Резервний каталог з основними утилітами для відновлення
роботи системи

Каталог Призначення
/root Домашній каталог користувача root. Він розташований за
межами каталогу /usr/home з міркувань безпеки та, крім того,
доступний при аварійному завантаженні.
/sbin Системні файли, що виконуються, скомпіловані зі статичними
бібліотеками. Вони відрізняються від файлів, які зберігаються в
/bin, тим, що здатні змінити поведінку системи, тоді як
програми з /bin, являють собою лише утиліти користувача.
/sys Посилання на файли з вихідним кодом ядра. якщо вони були
встановлені.
/tmp Тимчасові файли. Даний каталог доступний для запису для всіх
користувачів.
/usr З цього каталогу починається "інша система".
/var Каталог. призначений для файлів, що змінюються.
/usr/bin Тут знаходиться додаткове програмне забезпечення, що є
частиною системи.
/usr/games Найважливіший каталог системи.
/usr/home Тут зберігаються домашні каталоги користувачів
/usr/home/ кожен користувач отримує у своє розпорядження каталог зі
ім'я_користувача своїм ім'ям.
/usr/include /usr/lib Тут є різні бібліотеки.
/usr/libdata /usr/libexec
/usr/local Тут знаходяться програми, які не є частиною операційної
системи.

Каталог Призначення
/usr/sbin Тут знаходиться додаткове програмне забезпечення,
призначене для адміністративних завдань.
/usr/share Тут є різноманітна документація, списки, довідники, словники
etc.
/usr/src Тут є вихідні коди FreeBSD.
/usr/local/bin Тут знаходиться прикладне програмне забезпечення, яке не є
частиною системи і встановлюється адміністратором.
/usr/local/etc Тут знаходяться файли налаштування цього ПЗ.
/usr/local/man Тут містяться файли довідки manual pages (man).
/usr/local/sbin Тут знаходиться встановлюване програмне забезпечення, яке
може впливати на стан операційної системи.
/usr/local/share Тут є різноманітна документація.
/usr/local/www Тут розміщуються файли для Web-сервера.

2.3 Файли
2.3.1 Операції з файлами та каталогами (створення, перегляд, видалення)
Для створення файлу є цікава команда touch (доторкнутися). Її мета змінити час останнього доступу до
існуючого файлу, але якщо файлу не існує, вона його створює. Для створення директорії є команда
mkdir. Вона, до речі, може створювати багаторівневу структуру. Наприклад, наберіть mkdir -p
folder1/folder2/folder3 у своєму домашньому каталозі і вона створить кілька вкладених один одного
каталогів. Для створення декількох файлів або декількох каталогів, потрібно набрати їх імена через
пробіл. Наприклад: touch file1 file2 file3 або mkdir folder2 folder3.
Копіювання файлів виконується за допомогою команди cp (copy). Можна копіювати файл до
нового файлу (cp file1 file2), файл до каталогу (cp file1 folder1), каталог до нового каталогу (cp folder1
folder2 — якщо folder2 не існує) та каталог до існуючого каталогу (cp folder1 folder2 — якщо folder2
існує).
Переміщення та перейменування здійснюється за допомогою команди mv (move). Нею можна
перемістити файл у каталог, каталог на існуючий каталог, перейменувати файл, каталог.
Видалення порожніх каталогів командою rmdir. Для видалення файлів використовується
команда rm.
Усі ці команди мають спільні опції. Опція -R (рекурсивно) змушує виконати дію як над
каталогом, а й над усім, що у ньому перебуває, включаючи підкаталоги. Наприклад, rm -R folder1
видаляє каталог з усіма підкаталогами. Опція -i вимагає підтвердження кожної дії. Її корисно
використати, коли Ви не впевнені у своїх діях. -f форсує події. rm -f буде видаляти все, що тільки можна
незважаючи на те, чи відкрити файл, є він тільки для читання і чи є до нього доступ. Опція -P є у
команди rm і тричі перезаписує місце на диску, де був файл, випадкової послідовністю символів. -W
намагається відновити файл віддалений командою rm, але через специфічний пристрій файлової
системи UNIX систем, віддалений файл, як правило, є втраченим назавжди. І, нарешті, опція -v виводить
інформацію про кожну дію на екран.
Як Ви можете помітити, всі команди виконуються мовчки та швидко, не ставлячи зайвих питань.
Вважається, що й користувач віддав команду, він знає, що робить. UNIX не веде своїх користувачів за
руку, навіть якщо це призведе до сумних наслідків. Якщо Ви не впевнені у своїх діях, то використовуйте
опцію -i, і в разі небезпеки система попросить підтвердження на виконання. Можна також
використовувати опцію -v (verbose) для інформативного режиму.

Не забувайте, що варто уникати копіювання каталогу в цей каталог. Так як це призведе до


рекурсивного копіювання і швидко заповнить весь наявний простір на диску або витратити ліміт на
кількість файлів у файловій системі (т.зв. inodes).
При роботі з великою кількістю однакових файлів і каталогів зручно використовувати
метасимволи. Метасимволи дозволяють автоматично підставляти імена файлів. Два основних оператори
заміни, які використовуються в командному рядку FreeBSD, наведені в таблиці?

Таблиця 4: Символи-заступники

? Збігається з будь-яким одиночним символом. Наприклад, file?.txt збігається з


file1.txt, file2.txt та fileA.txt. Не збігається з file10.txt та fileAB.txt.
* Збігається з будь-якою послідовністю символів. Наприклад, f* збігається з
іменами файлів f, foo, file, file1.txt, file10.txt.

Квадратні дужки дозволяють визначити діапазон символів для пошуку збігу. Наприклад, file[1-3]
збігається із file1, file2, file3, але не з file4. Збіг можна вказати не лише для цифр, а й для літер.
Наприклад, file[a-c] збігається з filea, fileb, filec.
При роботі з символами важливо пам'ятати, що збіг базується на ASCII-коді символу.
Наприклад, file[A-b] збігається не тільки з fileA і fileb, але і з fileB, fileC і до fileZ.
Схожий формат використовується, коли потрібно вказати збіг з одним із символів зі списку.
Наприклад, file[1234]* збігається з іменами, які починаються з file1, file2, file3, file4 (далі можуть бути
будь-які символи).
Зі символами заступниками можна використовувати логічний оператор НЕ. Наприклад, file[!
1234]* збігається з іменами, які НЕ починаються з file1, file2, file3, file4.
Багато символів, які зустрічаються в іменах файлів (пробіл, ? , *, "), потрібно екранувати
символом зворотної риси. Будь-яке ім'я файлу так само можна взяти в лапки.
Для перегляду вмісту файлів існує багато програм: cat, less, more, head, tail. Скопіюйте кудись
собі файли з /usr/local/share/doc і з їх допомогою, а також за допомогою довідки man ознайомтеся з їх
роботою.
cat призначена для виведення вмісту файлу на пристрій виводу. За промовчанням ним є екран.
Якщо у списку файлів команди cat міститься кілька файлів, програма виведе їх один за одним. Якщо
файл великий, то має сенс вивести лише початок або кінець файлу командами head або tail, які без опцій
виводять лише 10 рядків з початку чи кінця відповідно. Додатковими опціями можна вказати бажану
кількість рядків для виведення цими командами.
Іноді необхідно вивести не весь файл, а певні рядки шаблону. Для цього застосовується
сімейство команд grep (grep, egrep, fgrep). Допустимо потрібно у файлі textfile знайти входження рядка
tom. для цього використовується grep у найпростішому форматі:
grep tom textfile
Ця команда виводить на екран кожний рядок текстового файлу, що містить підрядок tom. Це
означає, що критеріям пошуку задовольняють слова tomcat, atom, automatic. Щоб знайти саме слово,
необхідно оточити його пробілами і укласти в лапки:

grep " tom " textfile


Поширені опції grep:
• -i пошук без урахування регістру;
• -c не виводити рядки із входженнями шаблону, а надрукувати лише кількість входжень у файлі;
• -n крім рядків із входженням, виводити та її номер;
• -v звернути операцію та виводити рядки, які не включають шаблон.
egrep підтримує регулярні вирази.
Утиліти more і less. Раніше ці дві команди були окремими, але тепер more є жорстким
посиланням на less. Не зважаючи на своє ім'я, команда less (менше) є більш потужною, ніж more
(більше). Ці програми використовуються для відображення текстових файлів.

Таблиця 5: Команди утиліти

/шаблон пошук рядка за шаблоном


ПРОБЕЛ или f прокрутити на один екран уперед
b на один екран назад
стрелки вверх/вниз на рядок вперед/назад
ng перейти до рядка n
n% прокрутити до n відсотків (від 0 до 100)

У таблиці 5 представлені далеко ще не всі можливі команди. Заглянувши у man less, Ви


побачите багато інших.
Дуже часто необхідно не подивитись вміст файлу, а дізнатися кількість рядків (приклад -
кількість запитів у лог файлі) для цього є команда wc. Без параметрів вона виводить кількість рядків,
слів та символів. Для виведення одного значення використовуйте опції -l (line) для рядків, -w (word) для
слів та -c (char) для символів.

Для пошуку використовується команда find.


find . -name "filename*"
Ця команда здійснює пошук файлів, ім'я яких починається з "filename" у поточному каталозі
(точка позначає поточний каталог, дві точки - батьківський каталог), включаючи всі підкаталоги.
Врахуйте, що пошук за всіма підкаталогами, починаючи з кореневого, буде здійснюватися і по всіх
змонтованих каталогах, в т.ч. на інших дисках та файлових системах, що може тривати багато часу. У
команди find є опції, що вказують, як глибоко в ієрархії каталогів здійснювати пошук, а також
обробляти всі файлові системи або тільки поточну. Команда find дозволяє шукати файли не тільки по
імені, а й за власником, групою, розміром, датою. Про ці та інші властивості find розповідається на
сторінці довідки.
Крім того, існує команда locate, яка не шукає файлу на диску, а переглядає базу даних, що
містить список файлів у системі. Пошук виконується набагато швидше, але нові файли можуть бути не
включені в цю базу. Залежно від налаштувань, база оновлюється щодня або щотижня. За детальною
інформацією зверніться до man locate.
Для пошуку команд і програм можна використовувати whereis. Вона повертає адресу, за якою
знаходиться програма та сторінка довідки для неї.
2.3.2 Перенаправлення, канали
UNIX система побудована на одному з принципів, як "Будь-який об'єкт це файл". Т. е. Власне файл,
папка, пристрій (монітор, звукова карта, вінчестер), є файлом. Це дає дуже цікаву можливість.
Перенаправлення виводу. Наприклад, коли Ви набираєте cat file1 > file2, це означає, що cat замість
виведення на екран направить висновок в file2, видаливши попередньо його вміст. Для того, щоб у file2
залишився вміст, замість перенаправлення можна використовувати доповнення >>. Оскільки вже
говорилося, що в UNIX системах будь-який об'єкт є файлом, можливість перенаправлення дає великі
можливості для використання командного рядка. Наприклад ls > file1 виведе список файлів не на екран,
а файл file1, sound.wav > /dev/snd змусить звучати звукову карту і багато іншого.
А ось приклад функціонування каналів. У дешевих mp3 плеєрах відсутня можливість сортувати
файли за абеткою. Вони відтворюються у порядку, у якому були записані на плеєр. Windows записує
файли в алфавітному порядку і проблема відсутня. UNIX системи записують їх у порядку, в якому вони
знаходяться на вінчестері. Тобто. при команді cp song1.mp3 song2.mp3 song3.mp3 song4.mp3
/media/myplayer система отримує адресу на вінчестері першого записаного файлу (припустимо це
song2.mp3) потім проходячи по доріжках вінчестера записує файли які є в списку. І якщо file4.mp3 буде
наступним, система на плеєр запише його другим. В результаті плеєр відтворюватиме пісні не в тому
порядку, в якому Ви хотіли б.
Однією командою виправити це неможливо, тому доведеться використовувати кілька команд,
пов'язуючи їх каналами (конвеєрами). Для початку необхідно знайти всі файли та вивести їх назву разом
із повними шляхами до файлів. Інакше пісні з різних альбомів змішаються до купи. Для цього
використовується команда find/mymusic/mygroup-type f-print0. Потім потрібно відсортувати адреси
файлів командою sort -z. Після цього потрібно передавати цей список по черзі (xargs) команді
копіювання (cp). Повний вигляд команди виглядатиме так:
find  /mymusic/mygroup -type f -print0 | sort -z | xargs -0 cp -v -t /media/myplayer - -parents
Нехай Вас не лякає така довга команда, як для такої простої дії. Для будь-якої команди можна
використовувати підстановку (alias) і замість 20-30 слів вам потрібно буде ввести 2-3 літери.
Зрозуміло, можна розширити функціонал цієї команди, наприклад зберігаючи список записаних
пісень у файл (використовуючи додаток), командою uniq (одна з її функцій - підрахунок кількості
рядків, що повторюються) можна з'ясувати, які пісні Ви слухаєте найчастіше.
Порівнюючи цей список зі списком нових поповнень на якомусь файлообміннику
(використовуючи команду wget для збереження Web-сторінок і cmp для порівняння двох файлів), можна
автоматично закачувати ті пісні, яких ще немає у Вас в колекції (використовуючи той же wget для
закачування файлів ). А під кінець, інформацію про результати завантаження перенаправити в команду
mail, яка призначена для надсилання пошти, щоб Ви були в курсі нових надходжень до Вашої музичної
колекції.
UNIX системи мають нескінченний потенціал. Об'єднуючи та використовуючи стандартні
засоби, можна вирішити будь-яке завдання. Постійно пам'ятаючи про це і тренуючись у написанні
складних команд, Ви покладете на плечі комп'ютера всю рутинну роботу.

2.3.3 Посилання
UNIX системи дають можливість створювати посилання певні точки файлової системи.
Посилання дозволяють уникнути введення довгих шляхів. Існує два види посилань: жорсткі (hard links)
та символічні (soft links).
Жорстке посилання, це елемент файлової системи, що вказує на той же індексний дескриптор
(фізична точка на жорсткому диску), що інший файл. Насправді існує лише один фізичний файл. Але
йому відповідають два або більше елементи каталогу, що вказують на ті самі дані на жорсткому диску.
Зрозуміло, що будь-який файл має хоча б одне жорстке посилання. Жорсткі посилання створюються
командою ln за промовчанням.

ln /home/user/folder1/folder2/folder3/folder4/file.txt home/user/file.txt
В результаті в домашньому каталозі створюється елемент під назвою file.txt, що вказує на ту
саму точку жорсткого диска, що і /home/user/folder1/folder2/folder3/folder4/file.txt. Тепер до файлу
можна звертатися, не використовуючи довгий шлях. Щоб подивитися стан посилання можна набрати ls -
l.
- rw - - - - - - - 2 user user 3456 Jan 31 16:54 file.txt
Цифра 2 вказує на те, що цей файл має 2 жорсткі посилання. Усі зміни, що вносяться до файлу
або його атрибути, впливають і на інший файл, який вказує на ті ж дані на жорсткому диску. Час
модифікації та розмір файлу для обох посилань збігаються. При видаленні файлу
/home/user/folder1/folder2/folder3/folder4/file.txt лічильник посилань зменшиться на одиницю, однак
сам файл на жорсткому диску залишиться, оскільки існують посилання на нього. Як тільки кількість
посилань стає рівною нулю, файл видаляється фізично.
Жорсткі посилання мають такі обмеження:
• їх не можна використовувати як посилання на каталоги,
• вони не можуть перетинати межі файлових систем. Тобто. не можна створити жорстке посилання
на файл /var/log.txt (слайс /var) у домашньому каталозі (слайс /usr).
Для обходу цих обмежень є символічні (м'які) посилання. З символічними посиланнями (soft links,
symbolic links, symlinks) ви могли познайомитись у Windows, де вони називаються ярликами. На відміну
від жорсткої, символічне посилання є окремим файлом, в якому міститься адреса на інший файл. Для
створення символічного посилання використовується опція -s:
ln -s /home/user/folder1/folder2/folder3/folder4/file.txt /home/user/file.txt
В результаті в домашньому каталозі створюється файл, який всі звернення до нього
перенаправляє до файлу /home/user/folder1/folder2/folder3/folder4/file.txt. Щоб подивитися стан
посилання можна набрати ls -l
lrw - - - - - - - 1 user user 15 Jan 31 16:54 file.txt -> /home/user/folder1/folder2/folder3/folder4/file.txt
Те, що це символічне посилання, нам повідомляє літера l на початку рядка. Після символів ->
вказується розташування файлу, на який посилається це посилання.
Основні відмінності символічного посилання від жорсткого:
• права доступу до посилання не відображають права доступу до файлу
• лічильник посилання дорівнює 1 (якщо ви не створили на неї жорстких посилань), що означає,
що посилання вказує на файл, а не область даних на жорсткому диску.
• розмір посилання дорівнює не розміру файлу, а кількості символів, з яких складається адреса, що
посилається на файл
• час останньої модифікації посилання не збігається з часом модифікації файлу. Він говорить лише
про те, коли було змінено посилання.
Якщо видалити файл, на який посилається м'яке посилання, дані знищуються фізично та
посилання стає недійсним.
Завжди рекомендується для посилань на файл у межах однієї файлової системи створювати
жорсткі посилання. Для посилань на файл в інший ФС або на папку використовувати символічні
посилання.

2.4 Стандартні команди та утиліти FreeBSD


2.4.1 Утиліти користувача
Як уже говорилося, стандартна установка FreeBSD включає безліч програм і утиліт. Про всі їх
розповісти в даному курсі лабораторних робіт немає можливості та сенсу. Якщо Ви не знаєте, якою
командою виконати дію, то до Ваших послуг довідка man, у вигляді man -k. Ті ж дії виконує і команда
apropos. Якщо Ви, наприклад, не знаєте як встановлювати програмне забезпечення на FreeBSD, наберіть
man -k installing або apropos installing. Вам видадуть коротке резюме про програму pkg_add, яка
займається встановленням ПЗ.
Нижче представлені деякі команди та утиліти для ознайомлення із загальними можливостями
системи.
crypt
Простий засіб для шифрування файлів. Наберіть
crypt пароль < незашифрований_файл > зашифрований_файл
для шифрування та
crypt пароль < ашифрований_файл > незашифрований_файл
для розшифрування.
gzip, gunzip
Просте програма для стиснення файлів. Вона не вміє працювати з каталогами. Якщо Вам
потрібний потужний засіб архівування. то використовуйте tar.
df, du
Ці програми показують обсяги пам'яті на накопичувачах інформації. df -h - інформація про
зайняту пам'ять на вінчестері, а du -hd 1 им’я_папки - обсяг, який займає каталог на вінчестері.
bg, fg
Призначені для перемикання процесу у фоновий режим та повернення його з фонового.
Якщо Ви, наприклад, запустили пошук файлу у великому каталозі, а потім вирішили, що Вам
потрібно повернутися до командного рядка, то за допомогою клавіш Ctrl + z можна поставити процес на
паузу, а потім набравши bg, продовжити його у фоновому режимі. Якщо Ви захочете знову спостерігати
процес пошуку, то наберіть fg і команда find знову радуватиме Вас своїми повідомленнями.

history
Ця програма показує історію введених команд. Оскільки список досить довгий, то можна,
наприклад, вивести лише 10 останніх команд із набравши history — tail або перенаправити виведення в
команду less для більш комфортного перегляду за допомогою history — less.
script
Ціль цієї програми - копіювання всього, що виводиться на екран у файл. Запустивши її, а після
закінчення роботи, перервавши виконання цієї програми за допомогою Ctrl+d, у вказаному файлі Ви
можете бачити все, що виводилося на екран під час вашої роботи.
date
Назва говорить сама за себе - виведення поточної дати у різних варіантах.
cal
Виведення різних календарів.

tar
Універсальна програма створення архівів. Вона має безліч опцій, які дозволяють робити будь-які
операції з архівованими даними. Для новачка розібратися у ній так само важко, як і в текстовому
редакторі vi. Тому ось коротенька шпаргалка, а решту Ви можете отримати з довідки man.
Створення архіву
tar czf им’я_архіву.tar.gz моя_важлива_папка
Перегляд списку файлів в архіві
tar tf им’я_архіву.tar.gz
Вилучення файлів з архіву
tar zxf им’я_архіву.tar.gz
Як бачите, легко здогадатися, що c означає створити (Create), x — витягти (eXtract), z —
використовувати стиск, а f — операції проводити з файлом замість магнітної стрічки, яка за умовчанням
використовувалася 50 років тому за створення tar.
finger
Показує повну інформацію про користувача (якщо користувач звичайно її заповнив). Це дуже
відома програма. Колись (років 30-40 тому) інформація, яку вона дає, можна було отримати з будь-якого
сервера. Але тепер, з міркувань безпеки, її заблоковано скрізь.
info
Довідкова служба на кшталт man, але зі своїм синтаксисом.
bc, dc
bc це простий калькулятор. Запустивши його з опціями -lq можна вводити довільні приклади
виду (2+2)*2. Натиснувши Enter, ми отримаємо результат. bc дуже функціональний і може вирішувати
завдання будь-якої складності, обчислювати різні математичні функції. Він має багато налаштувань і в
нього встрен свою мову програмування, за допомогою якого можна формувати завдання для
обчислення. dc — стіковий калькулятор, який використовує зворотний польський запис. Вам він
знадобиться лише якщо не вистачить функціоналу bc.
echo
Хоча сенс команди відразу не зрозумілий і здається абсурдним, але незабаром Ви зрозумієте, що
вона дуже корисна і потрібна. Ця команда просто виводить на екран рядок, який Ви їй передали. Завдяки
цьому можна перенаправити цей рядок на введення іншої програми. Наприклад:
echo 10+10 | bc
Поверне вам число 20.
fc
Корисна утилітка. Якщо ви набрали команду в три рядки з двадцятьма змінними та тридцятьма
опціями, то набравши fc Ви легко зможете її зберегти у файл. Зробивши файл виконуваним, Вам більше
не потрібно знову набирати, а варто тільки запустити файл. Як зробити файл виконуваним, ми
дізнаємось у наступних лабораторних роботах.
2.4.2 Утиліти адміністрування
dd Ця команда призначена для низького рівня копіювання. Призначена для випадків коли cp не
може допомогти. Наприклад
dd if=/dev/ad0 of=/media/floppy/bootsect.lnx bs=512 count=1
копіює перші 512 байт із вінчестера (тобто завантажувач системи) на дискету.
ps
Команда для виведення інформації про запущені процеси. При запуску без опцій показує лише
процеси, запущені Вами. Якщо набрати ps aux, то виведуть усі процеси, запущені всіма користувачами,
а так само з більш детальною інформацією, такою як завантаження процесора та зайнята пам'ять.
Прочитавши man ps Ви навчитеся розуміти виведення цієї програми та вибирати собі потрібні дані з її
виведення.
top
Виконує ті ж функції, що й ps, але є інтерактивною і дозволяє виводити інформацію про процеси
в реальному часі.
nice, renice
Утиліта призначена для підвищення або зниження пріоритету виконання завдання. Пріоритет
вказується в умовних одиницях від -20 (найвищий) до 19 (найнижчий). Не забувайте, що перед цією
опцією потрібно вказати знак мінус. Тому на екрані пріоритет має виглядати як від -20 до -19.
Наприклад, Вам потрібно заархівувати базу даних на сервері, але при цьому не допустити навантаження
на нього. Для цього потрібно перед командою архівації вказати пріоритет — так:
nice -10 tar опції_для_команди_архівування &
Знак & означає, що процес буде запущено у фоновому режимі та дасть вам можливість
продовжити роботу з командним рядком. Якщо робочий день закінчився і сервер не використовується
так активно, а архівація ще триває, можна на ніч поставити збільшення пріоритету. Для цього за
допомогою команди ps потрібно дізнатися про PID процесу і збільшити його пріоритет:
renice - -10 -p pid_процесу
Врахуйте, що переведення процесу у найвищий пріоритет переводить цей процес практично у
режим реального часу (realtime mode). Після цього всі ресурси обчислювальної системи будуть кинуті з
його виконання і система відмовиться відповідати навіть команди з клавіатури.
Команду nice можна застосовувати як для процесів, але й груп і окремих користувачів.
kill, killall
Утиліти, які допомагають вбити процес, надіславши їм сигнал переривання. Сигнали
переривання можуть бути такими:

Таблиця 6: Сигнали переривання

Сигнал Им’я Значення


1 HUP Переривання та перезапуск
2 INT Переривання
3 QUIT Вихід
6 ABRT Аварійне завершення
9 KILL Сигнал завершення, який не можна ігнорувати
14 ALRM Тривога
15 TERM Коректне завершення процесу

Якщо якась програма зависла, то, дізнавшись попередньо PID, можна за допомогою kill надіслати їй
сигнал завершення TERM:
kill -15 33446
Якщо вона не відповідає, використовуйте сигнал KILL:
kill -9 33446
killall допомагає завершити всі процеси, запущені певною командою. Наприклад, killall tar
скасує всі запущені процеси архівації. Врахуйте, що сигнал 9 KILL дуже грубий. Якщо Ви перервете
архівацію таким способом, то на диску залишаться шматки файлів, в які йшов запис. Намагайтеся
завершувати програми коректно за допомогою сигналу 3 QUIT або 15 TERM.
uname
Ця утиліта показує різноманітну інформацію про систему. У довідковій службі man, Вам
розкажуть про те, як дізнатися тип процесора, встановлену операційну систему, архітектуру комп'ютера
та багато іншого, що знає ця утилітка.
uptime
Виводить час роботи системи та середню завантаженість за останні 1, 5 та 15 хвилин.
w, who, users
Ці команди виводять різну інформацію про користувачів, які зараз працюють у системі.
ac
Выводит информацию о продолжительности работы пользователей в системе. Как по дням — ac
-d имя_пользователя так и по пользователям вообще — ac -p.
Виводить інформацію про тривалість роботи користувачів у системі. Як по днях - ac -d
ім'я_користувача так і по користувачам взагалі - ac -p.
last
last виводить повнішу інформацію. Хто колись підключився і з якого терміналу, скільки часу
пропрацював і хтось вимикав систему.
2.4.3 alias’и
Аліаси (або псевдоніми) – це підстановка замість однієї команди іншою. Часто їх
використовують для того, щоб уникнути введення великої кількості опцій. Подивившись історію команд
командою history Ви можете замінити найчастіше використовувані команди їх псевдонімами.
Наприклад ввівши
alias ll="ls -lh"
по команді ll буде виводитися повний перелік файлів як і за команди ls -lh. Ввівши
alias ..="cd .."
Переміщуватись на рівень вище у файловій системі можна буде, набравши дві точки.
Псевдоніми також можна використовувати для безпеки
alias rm="rm -i"
Тепер при видаленні файлів у Вас завжди будуть запитувати підтвердження.
Псевдоніми працюють лише до кінця сесії. Щоб зробити їх постійно діючими, їх необхідно
внести в конфігураційний файл оболонки. Як це зробити, ми дізнаємось пізніше.

2.5 Завдання на лабораторну роботу


1. Зробити своїм інтерпретатором за замовчанням— bash.
2. Створити в домашньому каталозі довільну багаторівневу структуру файлів, каталогів та
посилань.
3. Заповнити файли різною інформацією за допомогою перенаправлення з команд і файлів.
4. Заархівувати Ваші створені каталоги та файли, зашифрувати архів та після видалення Ваших
папок відновити з архіву
5. Дізнатися md5 суму для свого архіву до шифрування та після. Пояснити результат.
6. Скільки місця займає Ваш домашній каталог?
7. Замінити вміст файлу motd, рядком Hello! . У звіті розповісти, чого це призвело.
8. Навчитися вбивати завислих процесів за допомогою kill і top. Для допомоги в експерименті
використовуйте програму sleep.
9. Скажіть, до якого результату призведе команда rm -Rf /* ?
10. Якщо після попереднього пункту система перестала працювати, поясніть, чому.
11. Знайдіть посібник з FreeBSD (Handbook) і зробіть жорстке посилання на нього у своєму
домашньому каталозі.
12. Виведіть на екран об'єм вільного дискового простору для кожного розділу файлової системи.
13.Виведіть на екран куди примонтовано вашу домашню директорію і скільки в цьому розділі
вільного місця
14. Виведіть на екран список файлів та піддиректорій у директорії /usr. При цьому висновок має бути
відсортований за розміром, від найбільших файлів та директорій до найменших.
15. Скільки сумарно займає місця директорії /var?
16.Виведіть довідку за командою lsof. Виведіть список усіх пов'язаних процесів, що працюють із
файлами в директорії /var/log

2.6 Зміст звіту


В отчете должна быть представлена последовательность действий, перечисленных в разделе "Задание на
лабораторную работу" в виде скриншотов или отчета сформированного программой script1 со своими
коментариями.
У звіті має бути подана послідовність дій, перелічених у розділі "Завдання на лабораторну роботу" у
вигляді скріншотів або звіту сформованого програмою script(2) зі своїми коментарями.

2.7 Запитання для самоконтролю


1. Що таке інтерпретатор команд? Які інтерпретатори команд ви знаєте? Як змінити інтерпретатор за
промовчанням для вибраного користувача?
2. Як користуватись довідковою системою? Які символи та команди використовуються для навігації
сторінками довідки? Як шукати потрібні слова на сторінках довідки?
3. Якими командами здійснюється навігація файлової системи?
4. Які основні каталоги файлової системи є в ОС, що використовується вами в лабораторній роботі?
5. Які операції із файлами ви знаєте? Що таке символи-заступники у іменах файлів?
6. Навіщо потрібна утиліта grep? Як їй користуватися окремо та в конвеєрах команд, наведіть приклади.
7. Як працює перенаправлення команд? Які символи використовуються для цього у командному рядку?
8. Дайте докладне пояснення, що виконує дана команда:

find  /mymusic/mygroup -type f -print0 | sort -z | xargs -0 cp -v -t /media/myplayer - -parents


За рахунок чого досягається результату? Що роблять команди sort? args? Що таке символ “|” ?
9. Які команди з управління процесами ви знаєте? Як перервати процес? Змінити його пріоритет?
10. Як переглянути список процесів? Яку інформацію надає команда top? Що таке load average (при
необхідності знайдіть відповідну інформацію в інтернеті).

1Програма script веде протокол лише потокової інформації, яка виводиться термінал. Інтерактивні
програми, такі як редактор vi або утиліта top, не можуть бути запротоколовані.

You might also like