Лабораторна робота №1. Навігація, маніпулювання файловою ієрархією та базова фільтрація даних у GNU Bash
Мета
Навчитися працювати в командній оболонці GNU Bash: орієнтуватися у файловій ієрархії, створювати, копіювати, переміщувати й видаляти файли та каталоги, а також опрацьовувати текстовий потік конвеєрами й базовими фільтрами.
Підготовка
Перед виконанням опрацюйте пов'язану лекцію:
Для роботи потрібне Linux-середовище з оболонкою Bash: звичайний дистрибутив Linux, підсистема WSL на Windows або віртуальна машина. Додаткові права адміністратора не потрібні. Також знадобиться особистий обліковий запис GitHub.
Завдання
Крок 1. Перевірте середовище
Відкрийте термінал і виконайте:
bash --version
pwd
whoami
Запишіть назву оболонки, версію, поточний каталог та ім'я користувача.
Крок 2. Створіть репозиторій курсу
- Увійдіть на GitHub і натисніть New repository.
- Назвіть репозиторій
operational-systems, залиште його публічним (Public), увімкніть Add a README file і натисніть Create repository. - Це має бути ваш власний єдиний репозиторій для всього курсу. Усі наступні лабораторні роботи ви додаватимете до нього в окремих папках
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. Здайте роботу
- Відкрийте свій репозиторій
operational-systemsна GitHub. - Виберіть Add file → Upload files і перетягніть папку
lab-01(зdata/,backup/,reports/іsetup.sh). Якщо браузер не приймає папку, створюйте файли через Create new file з відповідними шляхами. - Відкрийте
README.mdчерез значок олівця, додайте своє ім'я, групу та текстЛабораторна робота №1, після чого натисніть Commit changes. - Надішліть 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з ім'ям, групою та назвою роботи.
Надішліть те саме посилання на особистий репозиторій, яке використовуєте для інших робіт цього курсу.
Питання для захисту
- Що виводить команда
pwd? - Чим відрізняється
cpвідmv? - Що робить
grepу наведених конвеєрах? - Для чого у
setup.shвикористаноset -euo pipefail? - Яку адресу потрібно надіслати у форму здачі роботи?
