Ось урок, згенерований спеціально для тебе у стилі курсу CS50. Приготуйся, зараз ми розкладемо магію командного рядка по поличках!
🎓 CS50: Environment Variables та PATH (Українська версія)
Привіт, друзі! Радий бачити вас на цій лекції. 👋
Сьогодні ми зазирнемо під капот вашої операційної системи — чи це macOS, Linux, чи Windows. Ми розберемося з механізмом, який дозволяє вашому комп'ютеру розуміти вас з півслова, а програмам — працювати безпечно.
Тема сьогоднішнього уроку: Змінні оточення (Environment Variables) та загадковий PATH.
1. 🔥 Вступ: проблема та мотивація
Уявіть ситуацію. Ви пишете код для підключення до бази даних. Щоб усе запрацювало, вам потрібен пароль. Ви пишете прямо в коді:
password = "SuperSecretPassword123"
connect_to_db(password)
Все працює! Але потім ви завантажуєте цей код на GitHub. Питання: Що станеться за 5 хвилин? Відповідь: Вам прийде емейл, що ваші дані скомпрометовано, або хтось вкраде ваш акаунт.
Чому? Тому що ви залишили "ключі від квартири" (пароль) прямо на килимку перед дверима (у публічному коді).
Або інша ситуація. Ви відкриваєте термінал і пишете команду python. Вона запускається. А потім ви пишете my_script (який ви щойно створили), і термінал кричить: “Command not found”. Хоча файл лежить прямо тут! Чому python він бачить, а ваш файл — ні?
Без розуміння Environment Variables ви будете постійно: 1. Випадково "зливати" паролі. 2. Не розуміти, чому програма працює у вас, але не працює у колеги. 3. Блукати у помилках "command not found".
Аналогія: Уявіть, що ваш комп'ютер — це величезна професійна кухня. * Ви (шеф-кухар) кажете: "Дай мені сіль!". * Помічник (OS) не бігає по всьому місту. Він знає, що сіль стоїть на конкретній поличці. Це — PATH. * А ще на кухні є дошка оголошень, де написано: "Сьогодні готуємо для Вегетаріанців". Це — Змінна оточення. Всі кухарі дивляться на дошку і знають, як поводитися, не питаючи вас щоразу.
2. 🧠 Теоретична база
Давайте визначимо це просто, без зайвої води.
Що таке Environment Variables (Змінні оточення)?
Це набір пар КЛЮЧ=ЗНАЧЕННЯ, які живуть у пам'яті вашої оболонки (shell). Це глобальні налаштування для поточного сеансу роботи.
Коли ви запускаєте програму (наприклад, Python-скрипт), вона спочатку "озирається навколо" — дивиться на ці змінні — і налаштовує свою поведінку.
- Що варто запам'ятати: Змінні, як правило, пишуть
ВЕЛИКИМИ_ЛІТЕРАМИ. - Приклад:
USER,HOME,EDITOR.
Що таке PATH?
Це одна конкретна змінна оточення, але вона — "королева" всіх змінних.
Це просто список папок. Коли ви вводите команду (наприклад, code, git, npm) і натискаєте Enter, система робить наступне:
1. Бере цей список папок.
2. Біжить у першу папку: "Тут є файл git?". Ні.
3. Біжить у другу папку: "Тут є git?". Ні.
4. Біжить у третю... О, знайшла! 🚀 Запускає!
Якщо вона пробігла всі папки зі списку PATH і нічого не знайшла — ви бачите помилку command not found.
Інтуїтивне розуміння: PATH — це список місць, де вашій системі дозволено шукати інструменти.
3. 🧪 Приклади (від простого до реального)
(Приклади нижче наведені для Bash/Zsh — macOS/Linux, але я даватиму коментарі і для Windows)
Приклад 1: Знайомство з оточенням
Давайте запитаємо систему, хто ми є.
Введіть у терміналі:
echo $USER
(Windows PowerShell: Write-Host $env:USERNAME)
Що ви очікуєте побачити? Ваше ім'я користувача.
Чому? Бо система зберігає його у змінній $USER. Знак долара $ каже терміналу: "Не друкуй слово USER, а покажи, що всередині цієї змінної".
Приклад 2: Створення власної змінної
Давайте створимо змінну CS50_MOOD.
export CS50_MOOD="Excited"
echo $CS50_MOOD
Ми щойно створили змінну. Тепер будь-яка програма, запущена в цьому терміналі, зможе дізнатися ваш настрій.
Приклад 3: Його Величність PATH
Подивімося, де ваш комп'ютер шукає програми.
echo $PATH
Ви побачите щось страшне, на кшталт:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Це папки, розділені двокрапкою (:).
1. /usr/local/bin
2. /usr/bin
3. /bin
Коли ви пишете ls (список файлів), комп'ютер знаходить програму ls у папці /bin.
Приклад 4: Реальна проблема (Чому "command not found"?)
Припустимо, ви завантажили круту програму my_super_tool і поклали її в папку ~/Downloads.
Ви пишете:
my_super_tool
Система: Command not found.
Чому?
Тому що папки ~/Downloads немає у списку PATH. Система не знає, що там треба шукати. Вона не сканує весь диск, це було б надто повільно! Вона дивиться тільки туди, куди ви їй вказали.
4. 🛠 Практична частина
Час забруднити руки! Відкривайте термінал.
🔹 Завдання 1: Шпигунські ігри
Створіть змінну SECRET_CODE зі значенням Pizza123. Перевірте, чи вона є, вивівши її на екран.
Підказка: export ..., echo $...
🔹 Завдання 2: "Зникнення" (Scope)
- У поточному терміналі, де ви створили
SECRET_CODE, відкрийте нове вікно терміналу (або нову вкладку). - Спробуйте там зробити
echo $SECRET_CODE. - Що сталося? Пустота.
- Чому? Змінні оточення (зазвичай) живуть лише поки живе вікно терміналу. Коли ви його закриваєте — вони зникають. Це важливо для безпеки!
🔹 Завдання 3: Зламаємо (і полагодимо) PATH
⚠️ Обережно, це навчальна тривога!
Давайте зробимо так, щоб ваш термінал "забув" де лежать всі команди. Виконайте:
export PATH=""
Тепер спробуйте ввести ls або clear.
Результат: Command not found. Ви "осліпили" систему.
Як полагодити? Просто закрийте це вікно терміналу і відкрийте нове. Налаштування скинуться до стандартних.
🔹 Завдання 4: Додаємо свою папку в PATH
Уявіть, що у вас є папка ~/my-scripts. Як додати її в PATH, щоб не зламати все інше?
Правильна формула (ми додаємо нашу папку до існуючого списку):
export PATH=$PATH:~/my-scripts
Читається як: "Новий PATH дорівнює Старому PATH плюс наша папка".
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі в цій темі?
❌ Помилка новачка: "Хардкод"
Новачок пише шляхи жорстко:
file = open("C:/Users/Ivan/Desktop/project/data.txt")
Це працює тільки у Івана. У Марії це впаде.
❌ Фатальна помилка: Перезапис PATH
Новачок пише: export PATH="/my/folder".
Все. Він стер всі системні шляхи. Тепер не працює нічого, крім того, що в тій папці.
Профі завжди робить конкатенацію (додавання): export PATH="$PATH:/new/folder".
✅ Як думає профі (The "Twelve-Factor App")
Є такий стандарт розробки. Він каже: "Зберігайте конфігурацію в середовищі (environment)".
Профі використовує .env файли (спеціальні файлики, де записані змінні) і бібліотеки (як python-dotenv), щоб читати їх.
Код залишається чистим, а паролі лежать у безпечному місці, яке не потрапляє в Git.
6. 🧩 Підсумок
Отже, що ми маємо у сухому залишку:
- Environment Variables — це як налаштування у вашому смартфоні, але для програм. Вони передають контекст (хто юзер, яка мова, де база даних).
- PATH — це карта скарбів. Якщо папки немає на карті, система не знайде програму, навіть якщо вона стоїть поруч.
- Безпека — ніколи не пишіть паролі в коді. Використовуйте змінні оточення!
Що ви тепер вмієте: * Читати та створювати змінні оточення. * Розуміти, чому термінал "не бачить" ваші команди. * Безпечно додавати нові інструменти у свою систему.
У наступній лекції ми дізнаємося, як зробити ці зміни постійними (щоб не вводити export щоразу) і розберемося з Permissions (chmod) — чому іноді навіть знайдена програма відмовляється запускатися.
А поки що — це був CS50! 🏛️