Логотип коледжу
Оптико-механічний фаховий коледж

Лабораторна робота №1. Навігація, маніпулювання файловою ієрархією та базова фільтрація даних у GNU Bash

Мета

Навчитися працювати в командній оболонці GNU Bash: орієнтуватися у файловій ієрархії, створювати, копіювати, переміщувати й видаляти файли та каталоги, а також опрацьовувати текстовий потік конвеєрами й базовими фільтрами.

Підготовка

Перед виконанням опрацюйте пов'язану лекцію:

Для роботи потрібне Linux-середовище з оболонкою Bash: звичайний дистрибутив Linux, підсистема WSL на Windows або віртуальна машина. Додаткові права адміністратора не потрібні. Також знадобиться особистий обліковий запис GitHub.

Завдання

Крок 1. Перевірте середовище

Відкрийте термінал і виконайте:

bash --version
pwd
whoami

Запишіть назву оболонки, версію, поточний каталог та ім'я користувача.

Крок 2. Створіть репозиторій курсу

  1. Увійдіть на GitHub і натисніть New repository.
  2. Назвіть репозиторій operational-systems, залиште його публічним (Public), увімкніть Add a README file і натисніть Create repository.
  3. Це має бути ваш власний єдиний репозиторій для всього курсу. Усі наступні лабораторні роботи ви додаватимете до нього в окремих папках lab-NN.

Крок 3. Створіть структуру каталогів

У терміналі створіть робочу структуру першої лабораторної:

mkdir -p ~/labs/operational-systems/lab-01/data
mkdir -p ~/labs/operational-systems/lab-01/backup
mkdir -p ~/labs/operational-systems/lab-01/reports
cd ~/labs/operational-systems/lab-01
pwd
ls -la

mkdir -p створює проміжні каталоги, якщо їх ще немає. Запишіть, які файли показала команда ls -la у щойно створеній папці.

Крок 4. Маніпулюйте файлами

Виконайте команди створення, копіювання, переміщення та перейменування:

echo "перший запис" > data/readings.txt
cp data/readings.txt backup/readings-copy.txt
mv backup/readings-copy.txt backup/readings-renamed.txt
ls -la data backup

Тепер створіть тестовий файл із кількома вимірюваннями за допомогою cat і here-document:

cat > data/measurements.txt <<'EOF'
12.5 sensor-a
14.0 sensor-b
11.2 sensor-a
13.8 sensor-b
10.9 sensor-a
EOF
cat data/measurements.txt

Крок 5. Опрацюйте дані конвеєрами й фільтрами

Один за одним виконайте наступні конвеєри та поясніть кожен:

cat data/measurements.txt | sort
cat data/measurements.txt | grep sensor-a
cat data/measurements.txt | wc -l
cat data/measurements.txt | cut -d' ' -f1 | sort -n
cat data/measurements.txt | cut -d' ' -f1 | sort -n | tail -1
cat data/measurements.txt | cut -d' ' -f2 | sort | uniq

Запишіть: що робить sort, grep, wc -l, cut, tail, uniq і як символ | поєднує команди.

Крок 6. Сформуйте звіт

Зберіть відсортовані значення та кількість рядків в один звітний файл:

{
  echo "=== Відсортовані значення ==="
  cat data/measurements.txt | sort -n
  echo "=== Кількість рядків ==="
  cat data/measurements.txt | wc -l
} > reports/report.txt
cat reports/report.txt

Крок 7. Створіть сценарій відтворення

Створіть файл setup.sh у папці lab-01 із таким вмістом:

#!/usr/bin/env bash
set -euo pipefail
mkdir -p data backup reports
cat > data/measurements.txt <<'EOF'
12.5 sensor-a
14.0 sensor-b
11.2 sensor-a
13.8 sensor-b
10.9 sensor-a
EOF
echo "Готово. Створено data/measurements.txt (рядків: $(wc -l < data/measurements.txt))."

Зробіть його виконуваним і запустіть:

chmod +x setup.sh
./setup.sh

set -euo pipefail у першому рядку змушує сценарій зупинятися за першої помилки. Це безпечний спосіб автоматизувати повторювану підготовку даних.

Крок 8. Здайте роботу

  1. Відкрийте свій репозиторій operational-systems на GitHub.
  2. Виберіть Add file → Upload files і перетягніть папку lab-01data/, backup/, reports/ і setup.sh). Якщо браузер не приймає папку, створюйте файли через Create new file з відповідними шляхами.
  3. Відкрийте README.md через значок олівця, додайте своє ім'я, групу та текст Лабораторна робота №1, після чого натисніть Commit changes.
  4. Надішліть URL усього репозиторію, наприклад https://github.com/your-username/operational-systems, у формі здачі на поточній сторінці.

Очікуваний результат

Після кроку 5 команда з grep sensor-a виведе лише рядки з датчиком sensor-a, а wc -l поверне 5. Кінець команди sort -n | tail -1 дасть найбільше значення:

14.0

Звіт reports/report.txt після кроку 6 має містити відсортовані значення та число 5. Запуск ./setup.sh має вивести:

Готово. Створено data/measurements.txt (рядків: 5).

Кількість рядків залежить від ваших даних; у прикладі сценарій створює файл data/measurements.txt із п'ятьма рядками.

Структура репозиторію

operational-systems/
├── README.md
└── lab-01/
    ├── data/
    │   └── measurements.txt
    ├── backup/
    │   └── readings-renamed.txt
    ├── reports/
    │   └── report.txt
    └── setup.sh

Що здати

  • Посилання на ваш особистий репозиторій operational-systems, надіслане у формі здачі на поточній сторінці.
  • Папку lab-01 зі створеною структурою каталогів, файлами даних, звітом та сценарієм setup.sh.
  • Оновлений README.md з ім'ям, групою та назвою роботи.

Надішліть те саме посилання на особистий репозиторій, яке використовуєте для інших робіт цього курсу.

Питання для захисту

  1. Що виводить команда pwd?
  2. Чим відрізняється cp від mv?
  3. Що робить grep у наведених конвеєрах?
  4. Для чого у setup.sh використано set -euo pipefail?
  5. Яку адресу потрібно надіслати у форму здачі роботи?

Пов'язані лекції

Ресурси

Здати роботу