До списку уроків
9 клас · Урок 1 з 16

Операційні системи, Linux і твій сервер

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

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

Модуль I · IT Skills (Cloud Services & Documents) · 120 хвилин

Ти отримаєш акаунт на сервері — комп'ютері в дата-центрі, який працює цілодобово. Покладеш туди index.html і відкриєш сторінку за адресою, яку можна надіслати будь-кому.

Хід уроку

ЕтапХвЩо робимо
Вступ і мотивація5Твоя адреса в інтернеті
Що таке ОС15Ядро, процеси, файлова система, права
Linux проти Windows15Порівняльна таблиця
Одне дерево15/, /home, /etc, /var, /tmp, /usr
Шляхи15Абсолютний і відносний
Три ролі тек10www/ публічна, data/ приватна, upload/ приймальня
Файл, байти, UTF-810Розширення й «кракозябри»
Сервер, VPS, перший вхід15SSH, passwd, орієнтація в теці
FTP-клієнт і правила10WinSCP, правила спільного сервера
Практика і перевірка10Перша сторінка, check 01
Разом120
Крок 2

Операційна система

Програма, яка стоїть між тобою і залізом

Процесор уміє лише виконувати команди, диск — зберігати пронумеровані байти. Ні файлів, ні тек, ні користувачів вони не знають: це вигадала й тримає операційна система.

Процеси

Процесор один, а програм відкрито сотні. Система дає кожній шматочок часу й забирає назад, сотні разів на секунду. Кожна програма для неї — процес із номером PID.

Ядро

Ядро (kernel) — єдина програма, якій дозволено звертатися до заліза напряму. Решта просить його системними викликами: open() цей шлях, write() ці байти, close(). Ядро перевіряє права й лише тоді пише на диск.

програма просить ядро повертає результат Програми nano, ssh, nginx, твій скрипт — заліза не бачать зовсім Системні виклики open, read, write, stat — єдині двері з програми в ядро Ядро черга до процесора, пам'ять, файлова система, права Залізо процесор, оперативна пам'ять, SSD, мережева карта
Читай згори вниз: до заліза програма не дотягнеться.
Питання

Ти натиснув «зберегти» в редакторі. Хто насправді пише байти на диск?

Чому на серверах Linux

Windows стоїть на домашніх комп'ютерах, macOS — на техніці Apple, на серверах — Linux: за даними W3Techs, близько 86% сайтів працюють на Unix-подібних системах. За Linux не платять, він працює місяцями без перезавантаження, а без робочого столу пам'ять дістається сайту. Налаштування тут — текстові файли, дії — команди, які можна запускати щодня без тебе.

Питання

Клас орендував VPS за кілька доларів на місяць: 1 ГБ пам'яті, без монітора. Чому туди поставили Linux, а не Windows?

Крок 3

Linux проти Windows

Що порівнюємоWindowsLinux
Шляхидиски: C:\Users\Ivan\file.txtодне дерево від кореня: /home/ivan/file.txt
Роздільникзворотний слеш \прямий слеш /
Регістр в іменахне має значення: Index.HTML = index.htmlмає значення: це два різні файли
Тип файлуза розширенням (.exe, .txt)за вмістом; розширення — зручність для людини
Права доступуACL, «властивості → безпека»три цифри, як-от 644: хто читає, хто змінює, хто запускає (Крок 6)
Налаштування системиреєстр — двійкова базатекстові конфіги в /etc
Терміналдругорядний, головні — вікнаосновний спосіб роботи; сервер часто без графіки
Ліцензіяпропрієтарна, платнавільна, безкоштовна
Питання

Ти залив на сервер Foto.JPG, а в HTML написав <img src="foto.jpg">. На ноутбуці картинка була, на сайті зникла. Чому?

Правило на весь курс

Усе, що кладеш на сервер, називай латиницею, малими літерами, без пробілів: foto-1.jpg, а не Фото 1.JPG.

Крок 4

Одне дерево замість дисків

У Windows скільки дисків — стільки й початків: C:\, D:\. У Linux початок один: корінь /. Диск не отримує літери: його монтують у теку, наприклад /mnt/data, і файли видно за звичайним шляхом.

/ корінь — єдиний початок будь-якого шляху /bin самі команди: ls, cp, mv, nano /etc налаштування системи — звичайним текстом /home по теці на кожну людину в класі /home/kovalenko.m.9a твоя. Скорочено — ~ www/ upload/ data/ notes/ твій кабінет — розберемо далі /root тека адміністратора. Тобі туди зайти не дадуть /tmp тимчасове; чиститься при перезавантаженні /usr решта програм і бібліотек: /usr/bin, /usr/share /var те, що постійно росте: логи, черги, бази /var/log/nginx/access.log кожен візит на твій сайт — рядок тут
ТекаЩо всерединіНайближче в Windows
/корінь; початок будь-якого шляхуC:\, але спільний для всіх дисків
/homeпо теці на кожного користувача; твоя — /home/логін, скорочено ~C:\Users
/etcналаштування системи, текстові файлиреєстр + C:\ProgramData
/varте, що росте: логи, черги, базиC:\ProgramData, журнали подій
/tmpтимчасове; після перезавантаження порожня…\AppData\Local\Temp
/usrвстановлені програми (/usr/bin)C:\Program Files

Чому в Windows так не можна

Linux — один корінь / /home/kovalenko.m.9a /mnt/data сюди вмонтовано другий диск /mnt/usb а сюди — флешка шлях є З твоєї теки існує шлях до будь-якого файлу на машині — на іншому диску теж: cp ~/notes/todo.md /mnt/data/backup/ Windows — окремі дерева C:\ C:\Users\Ivan D:\ D:\Фото × Спільного кореня немає. Немає й шляху, який веде з C:\ на D:\ — лише «інший диск».
cd D: на сервері відповість No such file or directory.
Питання

Однокласник питає, як на сервері зайти «на диск D», де в нього фото. Що відповідаєш?

Питання

Сайт раптом перестав віддавати сторінки. Учитель каже: «подивися, що там записано про останні помилки». У якій теці шукати?

Крок 5

Шлях — це адреса файлу

Одна й та сама точка, два способи до неї дійти

Дорогу до файлу записують двома способами. Різниця — від чого відлічувати.

СпосібПочинається зВід чого відлічуєтьсяПриклад
Абсолютний/від кореня; однаковий звідусіль/home/kovalenko.m.9a/www/index.html
Відноснийз імені або ..від теки, де ти стоїш заразwww/index.html
Через тильду~від твоєї домашньої теки~/www/index.html

Оболонка замінює ~ на /home/kovalenko.m.9a ще до запуску команди, тому такий запис працює з будь-якого місця.

Три імені, які завжди є в кожній теці

ЗаписОзначаєДе знадобиться сьогодні
.тека, у якій ти зараз./build.sh — запустити скрипт звідси
..тека на рівень вищеcd .., ../img/logo.svg
~твоя домашня текаcd ~/www з будь-якого місця
/home/kovalenko.m.9a/www img/ avatar.svg мета story/ index.html Спостерігач A pwd → ~/www Спостерігач B pwd → ~/www/story A пише відносно img/avatar.svg B пише відносно ../img/avatar.svg Абсолютний — однаковий і для A, і для B, і для будь-кого ще /home/kovalenko.m.9a/www/img/avatar.svg
Файл один. Відносні записи різні, бо різні точки відліку.

Навігатор: шість кроків по дереву

  1. Набери pwd. Побачиш /home/kovalenko.m.9a. Якщо там інше — натисни «спочатку».
  2. Набери ls -la. У списку є . і .. — справжні записи в кожній теці.
  3. Набери cd www. Тепер pwd дає /home/kovalenko.m.9a/www. Помилка No such file or directory — ти не в домашній теці: набери cd ~.
  4. Клацни по файлу avatar.svg. Сторінка покаже обидва шляхи до нього; клац по теці переводить тебе всередину.
  5. Набери cd story. Мета та сама, а відносний шлях став ../img/avatar.svg.
  6. Набери cd ~/www — повертає з будь-якого місця. cd - веде в попередню теку.

Навігатор по файловій системі

Це тренажер: дерево спрощене, дати й розміри типові. Команди й тексти помилок — справжні.

Питання

У твоєму скрипті рядок cd www. Учора працювало, сьогодні — No such file or directory. Файли ніхто не видаляв. Що змінилося?

Питання

У теці лежить твій скрипт build.sh. Ти набрав build.sh і отримав command not found, хоча ls файл показує. Що набрати замість цього?

Якщо після переміщення сторінки зникли картинки

  1. Знайди в HTML рядок <img src="img/logo.svg">: він відлічується від теки, де лежить сама сторінка.
  2. Заміни на ../img/logo.svg, якщо картинка лишилася рівнем вище.
  3. Або постав /img/logo.svg: у HTML слеш на початку означає корінь сайту, тобто теку www/.
  4. Онови сторінку. Картинки досі немає — звір ім'я командою ls, регістр літер має збігатися.
Було: сторінка в www/ www/ index.html img/ logo.svg знайдено <img src="img/logo.svg"> Стало: сторінку перенесли в www/story/ www/ img/ logo.svg лишився тут story/ index.html шукає www/story/img/logo.svg → 404 Спосіб 1 — піднятися на рівень src="../img/logo.svg" Спосіб 2 — від кореня сайту src="/img/logo.svg"
У HTML слеш на початку веде в корінь сайту, а в терміналі — у корінь /. Це два різні корені.
Питання

Сторінка відкривалася з теки www/, а після переміщення в www/story/ картинки зникли. Що не так з посиланнями?

Крок 6

Три ролі тек у твоєму кабінеті

Кабінет у всіх однаковий: www/, upload/, data/, notes/. В інтернет nginx віддає лише ~/www/.

Три цифри прав

У файлу троє: власник (ти), група (клас) і решта — зокрема nginx. Читати — 4, змінювати — 2, заходити в теку чи запускати — 1; цифри складають. Перша — тобі, друга — групі, третя — решті. Тому 755 на ~/www пускає nginx усередину, а 750 на ~/data — ні.

HTTP · весь світ браузер будь-кого FTP · ти WinSCP, FileZilla SSH · ти термінал www/ права 755 · публічна сайт, сторінки уроків, усе, що можна показувати upload/ приймальня з фільтром × сюди FTP кладе принесене; далі ти розкладаєш сам data/ права 750 · приватна × відповіді однокласників, CSV, логи — нікому більше notes/ приватна × чернетки й нотатки: видно тільки тобі Позначка × означає: сервер відповість 403 або 404 — файл по HTTP не віддається взагалі.
Тека вирішує, кому файл видно.

Далі в модулі

Тема модуляЩо з'явитьсяКуди має лягти
Тема 2 — формаresponses.csv — відповіді однокласників~/data/: не для інтернету
Тема 2 — формаstats.json — знеособлені підсумки~/www/form/: числа показувати можна
Тема 6 — дашбордлог роботи cron~/data/: службове
Будь-яка темафайл, принесений по FTP~/upload/, а звідти вручну далі
Питання

Ти зібрав відповіді однокласників у файл responses.csv. Куди його класти?

Питання

Ти залив index.html по FTP, клієнт написав «успішно», а сайт усе одно порожній. Де файл?

Крок 7

Файл — це вміст, а не ім'я

Звідки беруться «кракозябри» і чому це знадобиться на CSV

У Windows тип файлу задає розширення. У Linux розширення — просто частина імені, а тип визначають перші байти самого файлу.

  1. Перейменуй картинку: mv avatar.png avatar.txt. Команда нічого не виводить — це і є ознака успіху.
  2. Перевір вміст: file avatar.txt. У відповіді буде PNG image data, бо байти всередині не змінилися. Якщо бачиш ASCII text — ти перейменував не той файл.
ім'я бреше, вміст — ні
$ mv avatar.png avatar.txt $ file avatar.txt avatar.txt: PNG image data, 512 x 512, 8-bit/color RGBA, non-interlaced

Текст — це теж байти

У текстовому файлі теж лежать байти. Питання лише в тому, за якою таблицею їх читати; ця таблиця називається кодуванням. Стандарт один — UTF-8: латинська літера займає один байт, кирилична — два.

Слово «Київ» у файлі К и ї в 4 літери — але не 4 байти На диску (UTF-8) — вісім байтів D0 9A D0 B8 D1 97 D0 B2 кирилична літера — 2 байти, латинська «Kyiv» — 4 байти на все слово програма читає ці самі байти за таблицею Windows-1251 Байт за байтом, кожен окремо Р љ Р ё С Р І РљРёС—РІ Головне Файл не «зіпсувався»: байти ті самі. Змінилася лише таблиця, за якою їх читають. Треба читати й зберігати в UTF-8.
«К» — це U+041A, у UTF-8 байти D0 9A. У таблиці Windows-1251 байт D0 означає «Р», 9A — «љ». Звідси й РљРёС—РІ.
Питання

Ти зберіг data.csv у старому редакторі, залив на сервер — і на сторінці замість «Київ» видно РљРёС—РІ. Що сталося з файлом?

BOM — три байти, які псують перший рядок

На початку файлу може стояти службова мітка BOM: байти EF BB BF. Багато програм читають її як частину першого символа, і заголовок name,age перестає збігатися з іменем колонки.

  1. Перевір файл: file data.csv. Слова with BOM у відповіді означають, що мітка є. Відповідь No such file or directory — ти в іншій теці, набери pwd.
  2. Відкрий файл у редакторі й збережи заново в режимі «UTF-8 без BOM».
  3. Залий файл на сервер ще раз і повтори file data.csv. Тепер у відповіді має лишитися тільки UTF-8 Unicode text.
Пастка Windows PowerShell 5.1 Команда … | Out-File -Encoding utf8 list.csv записує UTF-8 разом із BOM. Для суто латинських списків бери -Encoding ascii, а текст з українськими літерами зберігай редактором у режимі «UTF-8 без BOM». У Git Bash, macOS і Linux звичайне > list.csv BOM не додає.
Питання

Скрипт скаржиться, що в CSV немає колонки name, хоча в першому рядку вона перша й написана правильно. Що перевіряєш?

Питання

Ти перейменував avatar.png на avatar.txt. Чи став файл текстовим?

Крок 8

Сервер, VPS і перший вхід

Комп'ютер, який не вимикають

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

Одну машину в дата-центрі ділять між орендарями: кожен має свою систему, свій шматок диска і свою адресу. Це й називають VPS — віртуальний приватний сервер.

Домашній ПКVPS класу
Працюєпоки ти його не вимкнувцілодобово, роками
Доступсів за ньогопо SSH з будь-якої точки світу
Адреса в мережізмінюєтьсяпостійна, до неї чіпляють домен
Хто ще на ньомутільки тиувесь клас — у кожного свій акаунт і своя тека в /home
Хто головнийтиroot — це вчитель; у тебе звичайний акаунт

Двері в сервер пронумеровані: SSH слухає порт 22, FTP — 21, вебсервер — 80 і 443. Диск при цьому один, тому покладений по SSH файл вебсервер віддає одразу.

Перші тридцять секунд на сервері

  1. Відкрий Windows Terminal. SSH у нього вбудований, ставити нічого не треба.
  2. Набери ssh kovalenko.m.9a@91.219.61.4, підставивши свій логін. Сервер попросить пароль. Напис Connection timed out — немає мережі або в адресі помилка.
  3. На першому вході термінал покаже відбиток ключа SHA256:…. Звір його з тим, що на дошці, і набери yes.
  4. Введи пароль. Символи не показуються, і це нормально. Після Permission denied перевір розкладку й Caps Lock і повтори вхід.
  5. Набери whoami. Сервер відповість твоїм логіном.
  6. Набери pwd. З'явиться /home/kovalenko.m.9a: після входу ти стоїш у своїй домашній теці.
  7. Набери ls -la. Побачиш чотири теки: data, notes, upload, www. Котроїсь немає — скажи вчителю.
перший вхід
$ whoami kovalenko.m.9a $ pwd /home/kovalenko.m.9a $ ls -la drwx--x--x 6 kovalenko.m.9a kovalenko.m.9a 4096 Sep 2 09:40 . drwxr-xr-x 3 root root 4096 Sep 1 18:02 .. drwxr-x--- 2 kovalenko.m.9a kovalenko.m.9a 4096 Sep 2 09:41 data drwx------ 2 kovalenko.m.9a kovalenko.m.9a 4096 Sep 2 09:41 notes drwx------ 2 kovalenko.m.9a kovalenko.m.9a 4096 Sep 2 09:41 upload drwxr-xr-x 2 kovalenko.m.9a kovalenko.m.9a 4096 Sep 2 09:41 www

Записи . і .. — сама тека і тека рівнем вище. Права www інші, ніж у решти: тільки в неї дозволено зайти вебсерверу.

Дати й розміри тут — типові для навчального сервера; на твоєму акаунті вони будуть свої. Права і склад тек — справжні.

Дві клавіші, які економлять урок Tab дописує ім'я файла чи теки за першими літерами й не дає помилитися в регістрі. Стрілка вгору повертає попередню команду.

Пароль

  1. Набери passwd одразу після входу: виданий пароль одноразовий.
  2. Введи поточний пароль, потім двічі новий. Він теж набирається наосліп.
  3. Дочекайся рядка passwd: password updated successfully. Помилка замість нього означає, що пароль не змінено: запусти passwd ще раз.
зміна пароля
$ passwd Changing password for kovalenko.m.9a. Current password: New password: Retype new password: passwd: password updated successfully
Пароль — це твій підпис Усе, що зроблено під твоїм логіном, зробив ти. Тому пароль не переказують нікому й не пишуть у чат класу.
Крок 9

FTP-клієнт і правила спільного сервера

SSHFTP / SFTP
Для чоговиконувати команди на серверіпереносити файли туди й назад
Що бачиштекстовий терміналдва вікна: твій комп'ютер і сервер
Порт2221, у SFTP — 22
Програмаssh, Windows Terminal, PuTTYWinSCP, FileZilla
Логін і парольті самі — акаунт один
Коли зручнішезмінити права, запустити скриптзакинути десяток файлів мишею

Налаштування WinSCP

ПолеЗначенняЯкщо помилитися
ПротоколSFTP (або FTP, якщо сказав учитель)з'єднання не встановиться
Хост91.219.61.4«не вдалося знайти сервер»
Порт22 для SFTP, 21 для FTPтаймаут
Логін і парольті самі, що й для SSH«Access denied»: перевір Caps Lock
Режим (для FTP)пасивний, кодування UTF-8список файлів не вантажиться
Що сервер не прийме Відео, аудіо й будь-який файл, більший за 2 МБ. Клади лише текст: HTML, CSS, JS, JSON, CSV, MD, SH, SVG і зображення до 500 КБ.
Правила Не працюй через sudo. Чужі теки не чіпай. Щось зламав — одразу скажи вчителю.
Крок 10

Практика: акаунт, теки, перша сторінка

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

Ті самі одинадцять кроків докладніше

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

  1. Отримай логін і пароль. Учитель видає їх на аркуші. Запиши логін у зошит: він же стане адресою твого сайту. Пароль нікому не показуй — усе, що зроблено під твоїм логіном, зробив ти.
  2. Підключися по SSH. Відкрий Windows Terminal і набери ssh kovalenko.m.9a@91.219.61.4, підставивши свій логін. На перше запитання про ключ відповідай yes. Пароль набирається наосліп: символи не показуються, це нормально. Напис Connection timed out — немає мережі або в адресі помилка, Permission denied — перевір розкладку й Caps Lock.
  3. Зміни виданий пароль на свій. Набери passwd. Спершу введи старий пароль, потім двічі новий. Успіх — рядок passwd: password updated successfully. Це робиться один раз, на першому уроці.
  4. З'ясуй, де ти стоїш, і роздивися теки. Набери pwd && ls -la. Перша команда виведе /home/kovalenko.m.9a з твоїм логіном, друга — чотири теки: data, notes, upload, www.
  5. Перевір три ролі тек одним рядком. Набери ls -ld ~/www ~/upload ~/data ~/notes. Ключ -d показує саму теку, а не її вміст. Випиши в зошит, у кого які права: у www вони інші, ніж у решти, — саме тому в інтернеті видно лише її.
  6. Створи теки майбутніх тем. Набери mkdir -p ~/www/story ~/www/form ~/www/deck. story — історія з теми 1, form — опитування з теми 2, deck — презентація з теми 3. Команда мовчить, якщо все вдалося; перевір результат командою ls ~/www.
  7. Зверстай першу сторінку. Набери nano ~/www/index.html. Усередині зроби h1 зі своїм іменем, абзац «про мене» і навігацію — три посилання на теки story, form і deck, які ти щойно створив. Збережи Ctrl+O, вийди Ctrl+X.
  8. Опиши структуру кабінету у README.md. Набери nano ~/www/README.md. Файл лягає поруч з index.html, у теці www. Напиши по абзацу на кожну з чотирьох тек: що там лежить, хто це бачить, чому саме так.
  9. Виправ права. Набери chmod 755 ~/www && chmod 644 ~/www/index.html ~/www/README.md. 755 на теку — щоб вебсервер міг у неї зайти; 644 на файли — щоб міг прочитати. Без цього сервер віддасть 403.
  10. Налаштуй WinSCP і зроби тестове завантаження. Хост 91.219.61.4, логін і пароль ті самі, режим пасивний, кодування UTF-8. Поклади будь-який текстовий файл у ~/upload/ і перенеси його звідти в ~/www/ — мишею у WinSCP або командою mv ~/upload/файл ~/www/. Якщо замість українських літер видно РљРёС—РІ, збережи файл у редакторі в UTF-8 без BOM і залий ще раз.
  11. Перевір обидві межі в браузері. Відкрий http://91.219.61.4/s/kovalenko.m.9a/ зі своїм логіном — має з'явитися твоя сторінка. Помилка 404 означає, що файл названо не index.html або він лежить не в ~/www. Потім відкрий http://91.219.61.4/s/kovalenko.m.9a/data/: сервер має відповісти 403 або 404. Якщо ця сторінка відкрилася, клич учителя одразу.

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

Що має бути в README.md Чотири абзаци — по одному на теку: що там лежить, хто це бачить і чому саме так. До цього файлу ти повертатимешся щоразу, коли не знатимеш, куди покласти новий файл.
Крок 11

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

Система зайде у твій акаунт і подивиться, що ти справді зробив. Спроби не обмежені.

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

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

Крок 12

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

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

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

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

  1. Додай в index.html блок «мої цілі на модуль» — 3–5 речень.
  2. Допиши в README.md три речення про те, чим файлова система Linux відрізняється від системи на твоєму домашньому комп'ютері. Мінімум один приклад шляху — свій, а не з уроку.
  3. Запиши в ~/notes/paths.md три записи одного й того самого свого файлу: абсолютний, відносний від ~ і адресу в браузері. Перевір кожен командою ls або в браузері.
  4. Домогтися зеленого check 01.

Типові помилки цього уроку

Джерела

Звідки взяті факти

Усе, що можна перевірити, — з відкритих стандартів і документації. Перевіряти дозволено й корисно.

Повний список із поясненнями, що саме на сторінці ілюстративне, — у файлі urok-01-джерела.md поруч із цією сторінкою. Приклади виводу команд (дати, розміри, uid) складені як типові для навчального сервера: на твоєму акаунті числа будуть свої.