Модуль I · IT Skills (Cloud Services & Documents) · 120 хвилин
Ти отримаєш акаунт на сервері — комп'ютері в дата-центрі, який
працює цілодобово. Покладеш туди index.html і відкриєш сторінку
за адресою, яку можна надіслати будь-кому.
| Етап | Хв | Що робимо |
|---|---|---|
| Вступ і мотивація | 5 | Твоя адреса в інтернеті |
| Що таке ОС | 15 | Ядро, процеси, файлова система, права |
| Linux проти Windows | 15 | Порівняльна таблиця |
| Одне дерево | 15 | /, /home, /etc, /var, /tmp, /usr |
| Шляхи | 15 | Абсолютний і відносний |
| Три ролі тек | 10 | www/ публічна, data/ приватна, upload/ приймальня |
| Файл, байти, UTF-8 | 10 | Розширення й «кракозябри» |
| Сервер, VPS, перший вхід | 15 | SSH, passwd, орієнтація в теці |
| FTP-клієнт і правила | 10 | WinSCP, правила спільного сервера |
| Практика і перевірка | 10 | Перша сторінка, check 01 |
| Разом | 120 |
Програма, яка стоїть між тобою і залізом
Процесор уміє лише виконувати команди, диск — зберігати пронумеровані байти. Ні файлів, ні тек, ні користувачів вони не знають: це вигадала й тримає операційна система.
Процесор один, а програм відкрито сотні. Система дає кожній шматочок часу
й забирає назад, сотні разів на секунду. Кожна програма для неї —
процес із номером PID.
Ядро (kernel) — єдина програма, якій дозволено звертатися до заліза
напряму. Решта просить його системними викликами: open()
цей шлях, write() ці байти, close(). Ядро перевіряє
права й лише тоді пише на диск.
Ти натиснув «зберегти» в редакторі. Хто насправді пише байти на диск?
Windows стоїть на домашніх комп'ютерах, macOS — на техніці Apple, на серверах — Linux: за даними W3Techs, близько 86% сайтів працюють на Unix-подібних системах. За Linux не платять, він працює місяцями без перезавантаження, а без робочого столу пам'ять дістається сайту. Налаштування тут — текстові файли, дії — команди, які можна запускати щодня без тебе.
Клас орендував VPS за кілька доларів на місяць: 1 ГБ пам'яті, без монітора. Чому туди поставили Linux, а не Windows?
| Що порівнюємо | Windows | Linux |
|---|---|---|
| Шляхи | диски: 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.
У Windows скільки дисків — стільки й початків: C:\,
D:\. У Linux початок один: корінь /. Диск
не отримує літери: його монтують у теку, наприклад
/mnt/data, і файли видно за звичайним шляхом.
| Тека | Що всередині | Найближче в Windows |
|---|---|---|
/ | корінь; початок будь-якого шляху | C:\, але спільний для всіх дисків |
/home | по теці на кожного користувача; твоя — /home/логін, скорочено ~ | C:\Users |
/etc | налаштування системи, текстові файли | реєстр + C:\ProgramData |
/var | те, що росте: логи, черги, бази | C:\ProgramData, журнали подій |
/tmp | тимчасове; після перезавантаження порожня | …\AppData\Local\Temp |
/usr | встановлені програми (/usr/bin) | C:\Program Files |
cd D: на сервері відповість No such file or directory.Однокласник питає, як на сервері зайти «на диск D», де в нього фото. Що відповідаєш?
Сайт раптом перестав віддавати сторінки. Учитель каже: «подивися, що там записано про останні помилки». У якій теці шукати?
Одна й та сама точка, два способи до неї дійти
Дорогу до файлу записують двома способами. Різниця — від чого відлічувати.
| Спосіб | Починається з | Від чого відлічується | Приклад |
|---|---|---|---|
| Абсолютний | / | від кореня; однаковий звідусіль | /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 з будь-якого місця |
pwd. Побачиш /home/kovalenko.m.9a.
Якщо там інше — натисни «спочатку».ls -la. У списку є . і .. —
справжні записи в кожній теці.cd www. Тепер pwd дає
/home/kovalenko.m.9a/www. Помилка No such file or
directory — ти не в домашній теці: набери cd ~.avatar.svg. Сторінка покаже обидва шляхи
до нього; клац по теці переводить тебе всередину.cd story. Мета та сама, а відносний шлях став
../img/avatar.svg.cd ~/www — повертає з будь-якого місця.
cd - веде в попередню теку.Це тренажер: дерево спрощене, дати й розміри типові. Команди й тексти помилок — справжні.
У твоєму скрипті рядок cd www. Учора працювало, сьогодні —
No such file or directory. Файли ніхто не видаляв. Що змінилося?
У теці лежить твій скрипт build.sh. Ти набрав
build.sh і отримав command not found, хоча
ls файл показує. Що набрати замість цього?
<img src="img/logo.svg">: він
відлічується від теки, де лежить сама сторінка.../img/logo.svg, якщо картинка лишилася рівнем вище./img/logo.svg: у HTML слеш на початку означає
корінь сайту, тобто теку www/.ls,
регістр літер має збігатися./. Це два різні корені.Сторінка відкривалася з теки www/, а після переміщення
в www/story/ картинки зникли. Що не так з посиланнями?
Кабінет у всіх однаковий: www/, upload/,
data/, notes/. В інтернет nginx віддає лише
~/www/.
У файлу троє: власник (ти), група (клас) і решта —
зокрема nginx. Читати — 4, змінювати — 2, заходити
в теку чи запускати — 1; цифри складають. Перша — тобі,
друга — групі, третя — решті. Тому 755 на ~/www
пускає nginx усередину, а 750 на ~/data — ні.
| Тема модуля | Що з'явиться | Куди має лягти |
|---|---|---|
| Тема 2 — форма | responses.csv — відповіді однокласників | ~/data/: не для інтернету |
| Тема 2 — форма | stats.json — знеособлені підсумки | ~/www/form/: числа показувати можна |
| Тема 6 — дашборд | лог роботи cron | ~/data/: службове |
| Будь-яка тема | файл, принесений по FTP | ~/upload/, а звідти вручну далі |
Ти зібрав відповіді однокласників у файл responses.csv.
Куди його класти?
Ти залив index.html по FTP, клієнт написав «успішно»,
а сайт усе одно порожній. Де файл?
Звідки беруться «кракозябри» і чому це знадобиться на CSV
У Windows тип файлу задає розширення. У Linux розширення — просто частина імені, а тип визначають перші байти самого файлу.
mv avatar.png avatar.txt. Команда нічого
не виводить — це і є ознака успіху.file avatar.txt. У відповіді буде
PNG image data, бо байти всередині не змінилися. Якщо бачиш
ASCII text — ти перейменував не той файл.У текстовому файлі теж лежать байти. Питання лише в тому, за якою таблицею їх читати; ця таблиця називається кодуванням. Стандарт один — UTF-8: латинська літера займає один байт, кирилична — два.
D0 9A. У таблиці
Windows-1251 байт D0 означає «Р», 9A — «љ».
Звідси й РљРёС—РІ.Ти зберіг data.csv у старому редакторі, залив на сервер —
і на сторінці замість «Київ» видно РљРёС—РІ.
Що сталося з файлом?
На початку файлу може стояти службова мітка BOM: байти
EF BB BF. Багато програм читають її як частину першого символа,
і заголовок name,age перестає збігатися з іменем колонки.
file data.csv. Слова with BOM
у відповіді означають, що мітка є. Відповідь No such file or
directory — ти в іншій теці, набери pwd.file data.csv.
Тепер у відповіді має лишитися тільки UTF-8 Unicode text.… | 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.
Чи став файл текстовим?
Комп'ютер, який не вимикають
Сервер працює цілодобово й чекає на запити. Монітора та клавіатури в нього немає: команди надсилають по мережі.
Одну машину в дата-центрі ділять між орендарями: кожен має свою систему, свій шматок диска і свою адресу. Це й називають VPS — віртуальний приватний сервер.
| Домашній ПК | VPS класу | |
|---|---|---|
| Працює | поки ти його не вимкнув | цілодобово, роками |
| Доступ | сів за нього | по SSH з будь-якої точки світу |
| Адреса в мережі | змінюється | постійна, до неї чіпляють домен |
| Хто ще на ньому | тільки ти | увесь клас — у кожного свій акаунт і своя тека в /home |
| Хто головний | ти | root — це вчитель; у тебе звичайний акаунт |
Двері в сервер пронумеровані: SSH слухає порт 22, FTP — 21, вебсервер — 80 і 443. Диск при цьому один, тому покладений по SSH файл вебсервер віддає одразу.
ssh kovalenko.m.9a@91.219.61.4, підставивши свій логін.
Сервер попросить пароль. Напис Connection timed out — немає
мережі або в адресі помилка.SHA256:….
Звір його з тим, що на дошці, і набери yes.Permission denied перевір розкладку й Caps Lock і повтори вхід.whoami. Сервер відповість твоїм логіном.pwd. З'явиться /home/kovalenko.m.9a:
після входу ти стоїш у своїй домашній теці.ls -la. Побачиш чотири теки: data,
notes, upload, www. Котроїсь
немає — скажи вчителю.Записи . і .. — сама тека і тека рівнем вище.
Права www інші, ніж у решти: тільки в неї дозволено зайти
вебсерверу.
Дати й розміри тут — типові для навчального сервера; на твоєму акаунті вони будуть свої. Права і склад тек — справжні.
passwd одразу після входу: виданий пароль
одноразовий.passwd: password updated successfully.
Помилка замість нього означає, що пароль не змінено: запусти
passwd ще раз.| SSH | FTP / SFTP | |
|---|---|---|
| Для чого | виконувати команди на сервері | переносити файли туди й назад |
| Що бачиш | текстовий термінал | два вікна: твій комп'ютер і сервер |
| Порт | 22 | 21, у SFTP — 22 |
| Програма | ssh, Windows Terminal, PuTTY | WinSCP, FileZilla |
| Логін і пароль | ті самі — акаунт один | |
| Коли зручніше | змінити права, запустити скрипт | закинути десяток файлів мишею |
| Поле | Значення | Якщо помилитися |
|---|---|---|
| Протокол | SFTP (або FTP, якщо сказав учитель) | з'єднання не встановиться |
| Хост | 91.219.61.4 | «не вдалося знайти сервер» |
| Порт | 22 для SFTP, 21 для FTP | таймаут |
| Логін і пароль | ті самі, що й для SSH | «Access denied»: перевір Caps Lock |
| Режим (для FTP) | пасивний, кодування UTF-8 | список файлів не вантажиться |
sudo. Чужі теки не чіпай. Щось зламав — одразу
скажи вчителю.Виконуй по черзі. Галочки зберігаються — сторінку можна закрити.
Номери збігаються з галочками вище. Тут написано, що набрати і що сервер відповість.
ssh kovalenko.m.9a@91.219.61.4, підставивши свій логін.
На перше запитання про ключ відповідай yes. Пароль
набирається наосліп: символи не показуються, це нормально. Напис
Connection timed out — немає мережі або в адресі помилка,
Permission denied — перевір розкладку й Caps Lock.passwd. Спершу
введи старий пароль, потім двічі новий. Успіх — рядок
passwd: password updated successfully. Це робиться один
раз, на першому уроці.pwd && ls -la. Перша команда виведе
/home/kovalenko.m.9a з твоїм логіном, друга — чотири теки:
data, notes, upload,
www.ls -ld ~/www ~/upload ~/data ~/notes. Ключ -d
показує саму теку, а не її вміст. Випиши в зошит, у кого які права:
у www вони інші, ніж у решти, — саме тому в інтернеті видно
лише її.mkdir -p ~/www/story ~/www/form ~/www/deck.
story — історія з теми 1, form — опитування
з теми 2, deck — презентація з теми 3. Команда мовчить,
якщо все вдалося; перевір результат командою ls ~/www.nano ~/www/index.html. Усередині зроби h1 зі
своїм іменем, абзац «про мене» і навігацію — три посилання на теки
story, form і deck, які ти щойно
створив. Збережи Ctrl+O, вийди Ctrl+X.nano ~/www/README.md. Файл лягає поруч з
index.html, у теці www. Напиши по абзацу на
кожну з чотирьох тек: що там лежить, хто це бачить, чому саме так.chmod 755 ~/www && chmod 644 ~/www/index.html ~/www/README.md.
755 на теку — щоб вебсервер міг у неї зайти; 644 на файли — щоб міг
прочитати. Без цього сервер віддасть 403.91.219.61.4, логін і пароль ті самі, режим пасивний,
кодування UTF-8. Поклади будь-який текстовий файл у
~/upload/ і перенеси його звідти в ~/www/ —
мишею у WinSCP або командою mv ~/upload/файл ~/www/. Якщо
замість українських літер видно РљРёС—РІ, збережи файл
у редакторі в UTF-8 без BOM і залий ще раз.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
Чотири абзаци — по одному на теку: що там лежить, хто це бачить і чому саме так.
До цього файлу ти повертатимешся щоразу, коли не знатимеш, куди покласти
новий файл.Система зайде у твій акаунт і подивиться, що ти справді зробив. Спроби не обмежені.
Демонстраційний режим: результат згенеровано для показу. На сервері
ця кнопка викликає POST /api/check, який запускає чекер уроку
від імені учня.
pwd, не питаючи сусіда;~/www відносним шляхом із будь-якого місця;Це те, що бачить учитель, коли виставляє оцінку.
| Складник | Вага | Результат |
|---|
index.html блок «мої цілі на модуль» — 3–5 речень.README.md три речення про те, чим файлова система
Linux відрізняється від системи на твоєму домашньому комп'ютері.
Мінімум один приклад шляху — свій, а не з уроку.~/notes/paths.md три записи одного й того самого
свого файлу: абсолютний, відносний від ~ і адресу
в браузері. Перевір кожен командою ls або в браузері.check 01.sudo — власником стає root,
і ти більше не можеш змінити власний файл;cd www з чужої теки замість cd ~/www;Index.HTML — сервер віддає 404;www\index.html;~/upload/ і не перенесений у ~/www/.Усе, що можна перевірити, — з відкритих стандартів і документації. Перевіряти дозволено й корисно.
/home,
/etc, /var, /tmp, /usr,
/root.
refspecs.linuxfoundation.org · FHS 3.0. і .. —
POSIX, розділ «Pathname Resolution».
pubs.opengroup.org · Pathname Resolution~ і чому ./script.sh — довідник Bash,
розділи «Tilde Expansion» і «Command Search and Execution».
gnu.org · Bash Reference ManualD0 читається як «Р»,
а 9A — як «љ».
unicode.org · CP1251.TXT89 50 4E 47 0D 0A 1A 0A — RFC 2083, розділ 3.1.
datatracker.ietf.org/doc/html/rfc2083Повний список із поясненнями, що саме на сторінці ілюстративне, —
у файлі urok-01-джерела.md поруч із цією сторінкою.
Приклади виводу команд (дати, розміри, uid) складені як типові
для навчального сервера: на твоєму акаунті числа будуть свої.