До списку уроків
8A · Урок 2 з 16

Технічний паспорт машини: sysinfo.sh і публікація

виконано0%
Крок 1

Що робимо сьогодні

Модуль I · тема 1, урок 1 з 1 · 120 хв

Сьогодні питаєш у сервера, що в нього всередині. Результат — скрипт sysinfo.sh і сторінка-паспорт.

Хід уроку

ЕтапХвЩо робимо
Розминка10Розібраний системний блок: що думає, що зберігає, що показує
Три шари15Hardware, software, firmware і межа між ними
Компоненти й одиниці20Плата, піраміда пам'яті, ГБ проти ГіБ
Перерва10
Шість команд15Діагностика сервера в живій SSH-сесії
Пишемо sysinfo.sh20Шебанг, chmod +x, перенаправлення
Таблиця паспорта15HTML-сторінка й завантаження по FTP
Автоперевірка10check 01 і виправлення червоних пунктів
Здача й ДЗ5Показуєш запуск скрипта, пояснюєш рядок
Разом120
Де працюєш Команди набираєш у SSH. Практика — у теці ~/www/lesson-01/: теки звуться за темою, а не за номером уроку.
Крок 2

Hardware, software і firmware

Три шари, дві межі

Що можна впустити на підлогу — hardware, залізо. Решта — software, програми. Програма всередині плати чи диска, що працює до старту ОС, — firmware, прошивка; на платі це UEFI.

software firmware hardware Програми браузер, ffmpeg, твій sysinfo.sh Операційна система Ubuntu 24.04, Windows 11 Ядро і драйвери Linux kernel, драйвер відеокарти Прошивка UEFI на платі, прошивка SSD Залізо процесор, RAM, диск, кулер
ПрикладШарЧому саме так
Планка RAM 16 ГБhardwareфізична деталь, яку вставляють у слот
Драйвер відеокартиsoftwareфайл із кодом; його можна видалити й поставити інший
UEFI материнської платиfirmwareкод у флеш-мікросхемі плати, працює до старту ОС
Контролер усередині SSDhardware + firmwareчип — залізо, його програма — прошивка
Ubuntu 24.04softwareопераційна система лежить на диску як набір файлів
Кулер процесораhardwareкрутиться, шумить, збирає пил
Твій sysinfo.shsoftwareтекстовий файл із командами
Питання

Ти зайшов у налаштування материнської плати і оновив UEFI до нової версії. Ти оновив залізо чи програму?

Питання

На парті розклали: блок живлення, кулер, драйвер відеокарти, модуль RAM. Що з цього software?

Крок 3

Компоненти й шлях даних

Плата з'єднує; дані йдуть до ядра через кеш

Задня панель USB · HDMI · LAN · аудіо Сокет CPU під кулером Слоти RAM (DIMM ×4) 24-pin живлення SATA ×4 диски M.2 — накопичувач NVMe SSD PCIe x16 — відеокарта PCIe x1 — звук, Wi-Fi PCIe x16 — другий слот Чипсет хаб плати Мікросхема UEFI CMOS CR2032

Хто за що відповідає

Сам ти набереш lscpu, free -h, lsblk, df -h. dmidecode і lspci на сервері не запустяться.

КомпонентЩо робитьЧим побачити в Linux
Процесор (CPU)виконує команди програм: додає, порівнює, пересилає числа. Усе інше в комп'ютері існує, щоб його годувати данимиlscpu
Оперативна пам'ять (RAM)швидкий тимчасовий стіл: тут лежить усе, з чим програми працюють заразfree -h
Накопичувач (SSD/HDD)довготривала полиця: зберігає файли й саму ОС, коли живлення вимкненеlsblk, df -h
Материнська платаз'єднує все доріжками, роздає живлення й тактові сигналиdmidecode (потрібні права root)
Чипсетрозширює процесор: із його небагатьох ліній робить багато портів USB, SATA, PCIelspci
Відеокарта (GPU)рахує зображення й паралельні задачі; тисячі простих ядер замість кількох складнихlspci | grep -i vga
Блок живлення (PSU)перетворює 230 В зі стіни на 12 / 5 / 3,3 В для платиніяк — це чиста електрика
Мережева картаперетворює дані на сигнал у кабелі або в ефіріip -br a

Ядра, потоки, частота

Ядра — окремі обчислювачі в процесорі. Поки один потік чекає на дані, ядро виконує другий: «4 ядра / 8 потоків» — це чотири залізні ядра.

Питання

Команда lscpu показала: Core(s) per socket: 4, Thread(s) per core: 2, CPU(s): 8. Скільки в машині фізичних ядер?

Питання

Ти дві години писав реферат і жодного разу не зберігав. Вимкнули світло. Де був текст до цієї миті?

Крок 4

Піраміда пам'яті

Чому пам'ять будують ярусами

РІВЕНЬ ЯКБИ ОДИН ТАКТ = 1 СЕКУНДА ЧАС Регістри 1 с ≈ 0,3 нс Кеш L1 3 с ≈ 1 нс Кеш L2 13 с ≈ 4 нс Кеш L3 50 с ≈ 15 нс RAM 4 хвилини ≈ 80 нс SSD (NVMe) 2 доби ≈ 50 мкс HDD 10 місяців ≈ 8 мс
РівеньТиповий обсягЧас доступуЕнергонезалежність
Регістридесятки байтів на ядро~0,3 нсні
Кеш L132–64 КіБ на ядро~1 нсні
Кеш L2256 КіБ – 2 МіБ на ядро~4 нсні
Кеш L38–32 МіБ спільні~15 нсні
RAM4–64 ГіБ~80 нсні
SSD NVMe256 ГБ – 4 ТБ~50 мкстак
HDD1–20 ТБ~8 мстак

RAM і кеші живуть лише на струмі: вимкнули світло — дані зникли. Тому текст зберігай на диск.

Час доступу і швидкість потоку

НосійПослідовне читанняЩо обмежує
HDD 7200 об/хв150–250 МБ/смеханіка: обертання диска й рух голівки
SSD по SATA III≈ 550 МБ/ссам інтерфейс SATA — 6 Гбіт/с
SSD NVMe, PCIe 4.0 ×4до 7000 МБ/суже мікросхеми пам'яті, а не шина
Питання

Програма тисячу разів поспіль читає той самий невеликий масив. Другий і всі наступні проходи помітно швидші за перший. Чому?

Крок 5

Біти, байти і два різні гігабайти

Одиниці різні, байти ті самі

Біт — це 1 або 0. Вісім бітів — байт, ним міряють файли: мала b — біт, велика B — байт.

Виробники дисків рахують тисячами: 1 ГБ — 10⁹ байтів. Система рахує двійками: 1 ГіБ — 2³⁰ байтів.

лінійка виробника — ГБ, по 1 000 000 000 байтів 0100200 300400 500 ГБ той самий диск: 500 000 000 000 байтів 0100200 300400 465,7 ГіБ лінійка системи — ГіБ, по 1 073 741 824 байти

500 000 000 000 ÷ 1 073 741 824 = 465,66

СІБайтівДвійковаБайтівПоказує менше на
кілобайт, КБ1 000кібібайт, КіБ1 0242,3%
мегабайт, МБ10⁶мебібайт, МіБ1 048 5764,6%
гігабайт, ГБ10⁹гібібайт, ГіБ1 073 741 8246,9%
терабайт, ТБ10¹²тебібайт, ТіБ1 099 511 627 7769,1%
Як це видно в командах df -h, free -h, lsblk рахують по 1024; df -H — по 1000.
Питання

Ти купив зовнішній диск «1 ТБ», підключив — а система показує 931 ГБ. Тебе обманули?

Крок 6

Шість команд діагностики

Питаємо в сервера, з чого він зроблений

Зайди по SSH на свій акаунт. Набирай команди по черзі і звіряй екран зі зразком виводу.

1. lscpu — процесор

термінал
$ lscpu
вивід
Architecture: x86_64 CPU(s): 8 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 Model name: Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz CPU MHz: 2294.608 Caches (sum of all): L1d: 128 KiB L2: 1 MiB L3: 16 MiB

Має вийти довгий список рядків «назва: значення». Побачив command not found — набери назву малими літерами, без пробілу.

Випиши для паспорта чотири рядки:

2. free -h — оперативна пам'ять

термінал
$ free -h
вивід
total used free shared buff/cache available Mem: 3.8Gi 612Mi 1.9Gi 12Mi 1.3Gi 2.9Gi Swap: 2.0Gi 0B 2.0Gi

Мають вийти рядки Mem і Swap. Бери число зі стовпчика available: пам'ять із buff/cache система віддає програмі одразу.

3. lsblk — блокові пристрої

термінал
$ lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS
вивід
NAME SIZE TYPE MOUNTPOINTS sda 40.0G disk ├─sda1 39.0G part / └─sda2 1.0G part /boot

Має вийти дерево: disk — диск, part — розділ. Колонка MOUNTPOINTS показує теку, до якої підключено розділ.

4. df -h — скільки місця лишилося

термінал
$ df -h
вивід
Filesystem Size Used Avail Use% Mounted on /dev/sda1 38G 12G 25G 33% / tmpfs 1.9G 0 1.9G 0% /dev/shm

Має вийти таблиця з колонкою Use%. Числа менші, ніж у lsblk: місце займають службові записи файлової системи.

Рядок tmpfs у паспорт не пиши: це тека в оперативній пам'яті.

Питання

lsblk показує диск sda на 40G, а df -h для кореня / — лише 38G. Чому числа не збігаються?

5. uptime — скільки сервер уже працює

термінал
$ uptime
вивід
14:32:07 up 27 days, 4:11, 2 users, load average: 0.08, 0.12, 0.09

Має вийти один рядок. Запис up 27 days — сервер працює 27 днів, load average — навантаження за 1, 5 і 15 хвилин.

Порівняй ці числа з кількістю ядер: більше означає чергу.

6. uname -a — система і ядро

термінал
$ uname -a
вивід
Linux nstekh 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC x86_64 GNU/Linux

Має вийти один рядок із чотирма відповідями: Linux — ядро, nstekh — ім'я машини, 6.8.0-45 — версія ядра, x86_64 — 64-бітний процесор.

Знімаємо все одним рухом

Виконай ті самі шість команд за один раз: дужки збирають їх у групу, а > кладе спільний вивід в один файл.

термінал
$ mkdir -p ~/data/lesson-01 $ { lscpu; free -h; lsblk; df -h; uptime; uname -a; } > ~/data/lesson-01/notes.txt $ wc -c ~/data/lesson-01/notes.txt

Остання команда покаже розмір файлу в байтах. Чекер вимагає понад 300 байтів — реальний вивід шести команд дає кілька тисяч.

Якщо wc -c пише No such file or directory — повтори mkdir -p.

Крок 7

Скрипт sysinfo.sh

Одна команда замість шести — і так щоразу

Скрипт — це текстовий файл із тими самими командами. Нового він не робить, зате набирати їх більше не треба.

Три речі, без яких не запуститься

1. Зроби першим рядком файлу #!/bin/bash. Цей рядок каже системі, якою програмою читати файл.

2. Видай файлу право на виконання. Набери три команди підряд:

термінал
$ ls -l sysinfo.sh $ chmod +x sysinfo.sh $ ls -l sysinfo.sh
вивід до і після
-rw-r--r-- 1 ТВІЙ-ЛОГІН ТВІЙ-ЛОГІН 812 Sep 2 14:20 sysinfo.sh -rwxr-xr-x 1 ТВІЙ-ЛОГІН ТВІЙ-ЛОГІН 812 Sep 2 14:20 sysinfo.sh

У другому рядку мають з'явитися три літери x — вони й дозволяють запуск. Якщо ls пише No such file or directory, ти в іншій теці: перевір pwd.

FTP губить біт виконання Завантажив скрипт файловим менеджером — права злетіли на rw-r--r--. Тому chmod +x роби по SSH, після завантаження.

3. Скеруй вивід у файл, інакше він зникне разом із вікном. Записів чотири:

ЗаписЩо робить
lscpuдрукує на екран, нічого не зберігає
lscpu > f.txtстворює f.txt, старий вміст стирає
lscpu >> f.txtдописує в кінець
lscpu | tee f.txtі на екран, і у файл

Готовий каркас

4. Скопіюй цей текст у файл ~/www/lesson-01/sysinfo.sh і встав своє прізвище. Кожен рядок ти маєш уміти пояснити вголос — про це питатимуть на здачі.

~/www/lesson-01/sysinfo.sh
#!/bin/bash # sysinfo.sh — технічний паспорт машини # автор: Прізвище Ім'я, 8-А OUT="$HOME/data/lesson-01/hardware.txt" mkdir -p "$(dirname "$OUT")" { echo "=== ТЕХНІЧНИЙ ПАСПОРТ ===" echo "Дата збору: $(date '+%Y-%m-%d %H:%M')" echo "Машина: $(hostname), користувач: $(whoami)" echo echo "--- Процесор ---" lscpu | grep -E 'Model name|^CPU\(s\)|Thread|Core\(s\)' echo echo "--- Оперативна пам'ять ---" free -h | head -2 echo echo "--- Диски ---" lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS df -h / echo echo "--- Система ---" uname -a uptime } > "$OUT" echo "Готово. Паспорт записано у $OUT"

Що тут відбувається

РядокПояснення
OUT="$HOME/..."одне ім'я замість довгого шляху; $HOME — твоя домашня тека
$(dirname "$OUT")bash підставляє шлях без імені файлу
mkdir -pстворює теку і мовчить, якщо вона вже є
{ ... } > "$OUT"вивід усієї групи йде у файл
grep -E '...'лишає з lscpu лише потрібні рядки
останній echoстоїть поза дужками, тому пише на екран

5. Запусти скрипт командою ./sysinfo.sh. Має вийти один рядок «Готово. Паспорт записано у …»; побачив Permission denied — повернись до кроку 2.

Питання

Ти створив скрипт, запускаєш ./sysinfo.sh і бачиш bash: ./sysinfo.sh: Permission denied. Що сталося?

Питання

Скрипт запустився, паспорт надрукувався на екран — але hardware.txt порожній. Що забули?

Сторінка паспорта

6. Відкрий hardware.txt і перенеси числа на сторінку ~/www/lesson-01/index.html: файл у приватній теці ніхто не побачить.

7. Зроби таблицю щонайменше з 7 рядків, по рядку на компонент, і список щонайменше з 6 пунктів: три залізні, три програмні.

8. Дай списку мітку id="hw-sw", а кожному пункту — data-type="hw" або data-type="sw". Без міток автоперевірка список не знайде.

каркас index.html
<table> <tr><th>Компонент</th><th>Модель / обсяг</th><th>Що робить</th></tr> <tr><td>Процесор</td><td>Xeon E5-2697 v4, 4 ядра</td> <td>виконує команди програм; 4 ядра означають...</td></tr> <!-- ще щонайменше 6 рядків: RAM, диск, файлова система, ядро, час роботи... --> </table> <ul id="hw-sw"> <li data-type="hw">модуль оперативної пам'яті</li> <li data-type="hw">твердотільний накопичувач</li> <li data-type="hw">кулер процесора</li> <li data-type="sw">ядро Linux</li> <li data-type="sw">драйвер мережевої карти</li> <li data-type="sw">скрипт sysinfo.sh</li> </ul>
Опис має бути твій На кожен компонент потрібно щонайменше 40 символів пояснення. На здачі вчитель попросить сказати те саме вголос.
Крок 8

Практика: збираємо паспорт

Виконуй по черзі. Галочки зберігаються — сторінку можна закрити.

Чекліст роботи

1. Зайди на сервер по SSH під своїм логіном і перевір, де ти опинився.

термінал
$ whoami $ pwd

Має вийти твій логін і шлях до твоєї домашньої теки. Якщо логін чужий — набери exit і зайди знову.

2. Створи дві теки уроку: приватну для даних і публічну для сторінки.

термінал
$ mkdir -p ~/data/lesson-01 ~/www/lesson-01

Команда нічого не друкує — це правильно. Помилка Permission denied означає, що ти не у своїй домашній теці.

3. Зніми вивід шести команд діагностики в один файл і перевір його розмір.

термінал
$ { lscpu; free -h; lsblk; df -h; uptime; uname -a; } > ~/data/lesson-01/notes.txt $ wc -c ~/data/lesson-01/notes.txt

Має вийти число понад 300 — стільки байтів у файлі. Якщо число менше, якась команда не спрацювала: запусти їх поодинці.

4. Створи скрипт і встав у нього каркас із кроку 7. Зберігає Ctrl+O, закриває Ctrl+X.

термінал
$ nano ~/www/lesson-01/sysinfo.sh

Після виходу перевір першим рядком файлу #!/bin/bash. Без нього скрипт не запуститься.

5. Видай скрипту право на виконання.

термінал
$ chmod +x ~/www/lesson-01/sysinfo.sh $ ls -l ~/www/lesson-01/sysinfo.sh

У правах мають з'явитися три літери x. Якщо їх немає — ти набрав chmod для іншого файлу.

6. Запусти скрипт із його теки.

термінал
$ cd ~/www/lesson-01 $ ./sysinfo.sh

Має вийти рядок «Готово. Паспорт записано у …». Побачив Permission denied — повернись до кроку 5.

7. Прочитай зібраний паспорт.

термінал
$ cat ~/data/lesson-01/hardware.txt

Мають вийти чотири розділи: процесор, пам'ять, диски, система. Файл порожній — у скрипті загубилося > "$OUT".

8. Зроби сторінку паспорта: таблиця щонайменше з 7 рядків і список id="hw-sw" щонайменше з 6 пунктів.

термінал
$ nano ~/www/lesson-01/index.html

Числа в таблиці мають збігатися з hardware.txt — саме це звіряє чекер. Кожному пункту списку постав data-type="hw" або data-type="sw".

9. Відкрий свою сторінку в браузері й перевір, що таблиця й список видно. Порожня сторінка означає, що файл лежить не в ~/www/lesson-01/.

10. Перейди на вкладку «Перевірка» і натисни кнопку. Спроби не обмежені.

Крок 9

Автоперевірка check 01

Система зайде у твій акаунт, запустить твій скрипт у пісочниці й звірить числа зі сторінкою. Спроби не обмежені.

Демонстраційний режим: результат згенеровано для показу. На сервері ця кнопка викликає POST /api/check, який запускає чекер уроку від імені учня.

Що вчитель дивиться на екрані

Крок 10

Шкала виконання

Це те, що бачить учитель, коли виставляє оцінку.

СкладникВагаРезультат
Виконано
0%
Рекомендований бал за 12-бальною

П'ять пасток цього уроку

СимптомПричина й лікування
«Диск обманює: купив 500, а показує 465»ГБ проти ГіБ. Перерахуй: 500·10⁹ ÷ 2³⁰ = 465,7
Permission denied під час запускунемає біта x: chmod +x sysinfo.sh по SSH
Скрипт працює, файл порожнійзабули >: вивід пішов на екран замість файлу
Вивід копіювали в редактор і форматування зламалосяне копіюй — використовуй >, >> або tee
Опис компонента не зарахованоменше ніж 40 символів або скопійований текст; перепиши своїми словами

Домашнє завдання

Допиши в ~/www/lesson-01/index.html абзац «яку машину я б зібрав собі і чому».

Умова одна: назви три конкретні компоненти. Пиши модель або обсяг, а не «хороший процесор».

Потім порівняй ці три числа з числами домашньої машини. Ти виписав їх як домашнє завдання уроку 1.

Довідка

Джерела

Звідки взяті числа на цій сторінці — можеш перевірити сам

Одиниці й префікси

Час доступу до пам'яті

Залізо

Прошивка

Команди й bash

Вивід команд у розділі «Шість команд» — це приклад для навчального сервера. На твоєму акаунті числа будуть свої. Саме твої числа й мають потрапити в таблицю.