03. Файлова система і навігація¶
Довідник бонус-уроку «Linux для розробника»
Розділ перевірено: кожну команду виконано в контейнерах Ubuntu, Debian і python:3.12-slim. Урок з вправами — Бонус. Linux.
Навіщо це потрібно¶
На сервері немає папок із іконками і файлів, які можна перетягнути мишею. Є тільки термінал. Щоб знайти файл конфігурації, зайти у директорію проєкту, скопіювати або видалити файл — потрібно знати базові команди навігації.
Це фундамент. Без розуміння файлової системи неможливо ні деплоїти проєкти, ні читати логи, ні налаштовувати сервіси.
Просте пояснення¶
Файлова система Linux — це одне велике дерево, яке починається з кореня
/. Все є вузлом цього дерева: директорії, файли, навіть пристрої.
В Windows є диски: C:\, D:\. В Linux немає дисків — є одна коренева директорія /, і все інше всередині неї.
Структура файлової системи¶
flowchart TD
classDef step fill:#eceff1,stroke:#546e7a,stroke-width:1px,color:#1a1a1a;
classDef decision fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#1a1a1a;
classDef success fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1a1a1a;
classDef error fill:#ffebee,stroke:#c62828,stroke-width:3px,color:#1a1a1a;
classDef warning fill:#fff8e1,stroke:#e65100,stroke-width:2px,color:#1a1a1a;
Root["/"] --> Home["/home — домашні директорії користувачів"]
Root --> Etc["/etc — конфігураційні файли"]
Root --> Var["/var — змінні дані: логи, кеш"]
Root --> Usr["/usr — програми і бібліотеки"]
Root --> Tmp["/tmp — тимчасові файли"]
Root --> Opt["/opt — сторонні програми"]
Root --> Srv["/srv — дані сервісів"]
Home --> Student["/home/student — твій home"]
Student --> Projects["projects/"]
Projects --> Django["my_django_app/"]
Var --> Log["/var/log — логи"]
Etc --> Nginx["/etc/nginx — конфіг Nginx"]
class Root warning
class Home,Etc,Var,Usr,Tmp,Opt,Srv,Projects,Django,Log,Nginx step
class Student success
Найважливіші директорії¶
| Директорія | Призначення |
|---|---|
/ |
Корінь файлової системи. Все починається тут |
/home |
Домашні директорії користувачів |
/home/student |
Твоя особиста директорія |
/etc |
Конфігураційні файли системи і сервісів |
/var/log |
Логи: Nginx, системні, твоїх сервісів |
/tmp |
Тимчасові файли (видаляються після перезавантаження) |
/usr/bin |
Системні програми (python3, git); службові — у /usr/sbin (nginx) |
/opt |
Сторонні програми, які ти встановлюєш вручну |
/srv |
Дані вебсервісів (Django static, media) |
Ключові символи шляхів¶
| Символ | Що означає |
|---|---|
/ |
Корінь (root) — якщо на початку шляху |
/ |
Роздільник між частинами шляху |
~ |
Домашня директорія поточного користувача |
. |
Поточна директорія |
.. |
Батьківська директорія (на рівень вище) |
Приклади:
/home/student/projects # абсолютний шлях
~/projects # те саме (через ~)
./manage.py # файл у поточній директорії
../settings.py # файл на рівень вище
Навігація¶
Дізнатися, де ти знаходишся¶
Print Working Directory. Показує повний поточний шлях.Перейти в директорію¶
cd /home/student/projects # абсолютний шлях
cd projects # відносний шлях (з поточної)
cd .. # на рівень вище
cd ~ # в домашню директорію
cd - # в попередню директорію
Список файлів і директорій¶
ls # простий список
ls -l # детальний список (права, розмір, дата)
ls -a # включаючи приховані файли (починаються з .)
ls -la # детальний + приховані
ls /etc # список конкретної директорії
Приклад виводу ls -la:
drwxr-xr-x 3 student student 4096 Jun 10 12:00 projects
-rw-r--r-- 1 student student 234 Jun 10 11:50 manage.py
-rw-r--r-- 1 student student 98 Jun 10 11:45 requirements.txt
# Дерево директорій
tree # не встановлений за замовчуванням: sudo apt install tree
tree -L 2 # тільки 2 рівні глибини
Робота з файлами і директоріями¶
Створення¶
mkdir my_project # створити директорію
mkdir -p a/b/c # створити вкладені директорії
touch file.txt # створити пустий файл
touch settings.py # або оновити дату модифікації існуючого
Перегляд вмісту файлу¶
cat file.txt # показати весь вміст
less file.txt # переглянути посторінково (q — вийти)
head -20 file.txt # перші 20 рядків
tail -20 file.txt # останні 20 рядків
tail -f /var/log/nginx/access.log # стежити за файлом у реальному часі
Копіювання¶
Переміщення і перейменування¶
mv file.txt new_name.txt # перейменувати
mv file.txt /tmp/ # перемістити
mv old_dir/ new_dir/ # перейменувати директорію
Видалення¶
⚠️ У Linux немає кошика. Видалений файл не повернеш.
rm file.txt # видалити файл
rm -r my_project/ # видалити директорію рекурсивно
rmdir empty_dir/ # видалити ПУСТУ директорію
Небезпека rm -rf¶
-r — рекурсивно (всі файли і підпапки), -f — без підтвердження (force). Саме rm -rf / сучасний GNU rm відхилить (it is dangerous to operate recursively on '/' — захист --preserve-root), але rm -rf /* або rm -rf "$DIR"/* з порожньою змінною DIR знищать всю систему без попередження.
Правила безпеки:
- Завжди перевіряй шлях перед rm -rf
- Використовуй ls спочатку, щоб побачити що буде видалено
- На production-серверах ніколи не запускай rm -rf без бекапу
Пошук файлів¶
find . -name "settings.py" # знайти файл по імені
find /var/log -name "*.log" # знайти всі .log файли
find . -type f -name "*.py" # тільки файли (не директорії)
find . -type d -name "migrations" # тільки директорії
grep -r "SECRET_KEY" . # знайти текст у файлах
grep -rn "def create_user" . # з номерами рядків
Корисні команди для Python/Django¶
# Де знаходиться python?
which python3
# Де встановлені пакети?
pip show django
# Подивитися структуру проєкту
tree my_django_project/ -L 2
# Знайти всі migration-файли
find . -path "*/migrations/*.py" -not -name "__init__.py"
Абсолютний vs відносний шлях¶
Абсолютний шлях — завжди починається з /
/home/student/projects/my_app/settings.py
Відносний шлях — відносно поточної директорії
(якщо ти в /home/student/)
projects/my_app/settings.py
або ./projects/my_app/settings.py
Коли використовувати: - Абсолютний — у скриптах і конфігурах (надійно, незалежно від cd) - Відносний — у терміналі для швидкої навігації
Типові помилки початківців¶
Помилка 1: No such file or directory
Перевір: чи правильно написано ім'я? Linux чутливий до регістру:
manage.py≠Manage.py
Помилка 2: Видалив не те.
Завжди перевіряй
lsпередrm. Немає кошика.
Помилка 3: Permission denied при переході в директорію.
У тебе немає права
x(execute) на директорію. Перевір права черезls -la.
Помилка 4: Плутати / і ~.
/— корінь системи.~— твоя домашня директорія/home/student.
Практичне завдання¶
Завдання 1¶
mkdir -p ~/practice/django_project
cd ~/practice/django_project
touch manage.py requirements.txt .env
mkdir app templates static
ls -la
Завдання 2¶
Поясни різницю між> і >>.
Завдання 3¶
Що відбулося?Завдання 4¶
Що знайшли ці команди?Самоперевірка¶
- [ ] Я можу пояснити структуру
/home,/etc,/var/log - [ ] Я розумію різницю між абсолютним і відносним шляхом
- [ ] Я можу навігуватися через
cd, бачити список черезls -la - [ ] Я вмію створювати, копіювати, переміщати і видаляти файли
- [ ] Я розумію небезпеку
rm -rfі перевіряю шлях перед видаленням - [ ] Я можу знайти файл через
findі текст черезgrep
Короткий підсумок¶
Файлова система Linux — це дерево від кореня /. Кожна директорія має своє призначення: /etc для конфігів, /var/log для логів, /home для твоїх файлів. Базові команди: pwd, cd, ls, mkdir, touch, cp, mv, rm. Наступний крок — права доступу і користувачі.