Ієрархія файлової системи Linux та управління процесами

Основи адміністрування Linux: файлова система, управління процесами та системні операції

Вступ

Адміністрування Linux вимагає глибокого розуміння файлових систем, управління процесами, безпеки та системних операцій. Цей всебічний посібник охоплює основні навички адміністрування Linux від операцій з файлами до моніторингу процесів, планування завдань та відновлення після збоїв.

Ми розглянемо ієрархію файлової системи Linux, команди для роботи з файлами, управління процесами, права доступу, стратегії архівування та інструменти моніторингу системи. Кожен розділ містить практичні приклади та кращі практики для production.

Серія Linux Administration

📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.

Це Частина I нашого комплексного 7-частинного посібника з адміністрування Linux:

  1. Частина I: Файлова система та управління процесами ← Ви тут
  2. Частина II: Аутентифікація користувачів та LDAP
  3. Частина III: Фаєрвол UFW та мережі
  4. Частина IV: systemd та SSH Hardening
  5. Частина V: Поштовий сервер Postfix
  6. Частина VI: Віртуалізація QEMU KVM
  7. Частина VII: Сховище LVM та RAID

Ієрархія файлової системи Linux

Архітектура файлової системи

Файлова система Linux має ієрархічну структуру, що починається з кореневої директорії (/), як визначено в Filesystem Hierarchy Standard.

   Runtime Directories   

   User Directories   

   System Directories   

  / root  

  /bin  

  Essential binaries  

  /boot  

  Boot loader, kernel  

  /etc  

  Configuration files  

  /lib  

  Shared libraries  

  /home  

  User home dirs  

  /root  

  Root user home  

  /proc  

  Process info  

  /dev  

  Device files  

  /tmp  

  Temporary data  

Ключові директорії:

  • /bin - Основні виконувані файли команд (ls, cat, cp)
  • /boot - Файли завантажувача та ядра
  • /dev - Файли пристроїв (жорсткі диски, термінали)
  • /etc - Конфігураційні файли для всієї системи
  • /home - Домашні директорії користувачів
  • /lib - Спільні бібліотеки для виконуваних файлів
  • /media - Точки монтування для знімних носіїв
  • /opt - Опціональне стороннє програмне забезпечення
  • /proc - Віртуальна файлова система з інформацією про ядро/процеси
  • /root - Домашня директорія суперкористувача root
  • /run - Дані виконання для процесів
  • /srv - Дані сервісів (веб-сервери, FTP)
  • /sys - Інформація про апаратне забезпечення системи
  • /tmp - Тимчасові файли (очищається при перезавантаженні)
  • /usr - Програми та дані користувачів
  • /var - Змінні дані (логи, кеші, черги)

Основні операції з файлами

Навігація та дослідження

# Список файлів з деталями
ls -lah /etc
# -l: довгий формат, -a: показати приховані, -h: зручні для читання розміри

# Рекурсивний список директорій
ls -R /var/log

# Знайти розташування команди
which python3

# Пошук команди за ключовим словом
apropos network

Управління файлами та директоріями

# Створити структуру директорій
mkdir -p /opt/myapp/{bin,config,logs}

# Копіювання зі збереженням атрибутів
cp -a /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

# Переміщення та перейменування
mv /tmp/oldname.txt /opt/data/newname.txt

# Видалення директорії та вмісту
rm -rf /tmp/old-data

Пошук файлів

# Пошук за іменем
find /var/log -name "*.log"

# Пошук за розміром (більше 100МБ)
find /home -size +100M

# Пошук та виконання команди
find /tmp -name "*.tmp" -mtime +7 -exec rm {} \;

# Пошук за часом модифікації (останні 24 години)
find /var/log -mtime -1

# Пошук за правами доступу
find /home -perm 777

Посилання: жорсткі посилання vs символічні посилання

Порівняння типів посилань

   Symbolic Link   

   points to   

  /etc/config.conf  

  Original file  

  /home/user/config  

  Symlink  

   Hard Link   

  Inode 12345  

  File Data  

  /home/file.txt  

  /backup/file.txt  

Створення посилань:

# Створити символічне посилання (найпоширеніше)
ln -s /etc/nginx/nginx.conf ~/nginx.conf

# Створити жорстке посилання (той самий inode, той самий розмір)
ln /var/log/app.log /backup/app.log

# Перевірити тип посилання
file ~/nginx.conf
# Вивід: symbolic link to /etc/nginx/nginx.conf

# Список номерів inode
ls -li /var/log/app.log /backup/app.log
# Обидва показують однаковий номер inode

Ключові відмінності:

Характеристика Жорстке посилання Символічне посилання
Перетин файлових систем Ні Так
Посилання на директорії Ні Так
Виживає після видалення джерела Так Ні (зламане посилання)
Місце на диску Не займає додаткового Мінімальне
Inode Той самий що й оригінал Інший

Перенаправлення введення/виведення

Стандартні потоки

   redirect 1>   

   redirect 2>   

  Command  

  stdin 0  

  Keyboard  

  stdout 1  

  Screen  

  stderr 2  

  Error output  

  output.txt  

  errors.log  

Приклади перенаправлення:

# Перенаправлення stdout у файл (перезапис)
ls -l /etc > output.txt

# Перенаправлення stdout у файл (додавання)
echo "New entry" >> /var/log/app.log

# Перенаправлення stderr у файл
find / -name "*.conf" 2> errors.log

# Перенаправлення stdout та stderr
command > output.txt 2>&1

# Перенаправлення stderr у stdout
command 2>&1 | grep "error"

# Відкинути вивід
command > /dev/null 2>&1

# Here document
cat << EOF > config.txt
server {
    listen 80;
    server_name example.com;
}
EOF

Архівування та стиснення

Створення архівів

# Створити tar архів (документація tar: https://www.gnu.org/software/tar/manual/tar.html)
tar -cvf backup.tar /etc/nginx
# -c: створити, -v: докладно, -f: файл

# Створити стиснутий tar.gz
tar -czf backup.tar.gz /var/www

# Створити tar.bz2 (краще стиснення)
tar -cjf backup.tar.bz2 /home/user

# Список вмісту архіву
tar -tf backup.tar.gz

# Розпакувати архів
tar -xzf backup.tar.gz -C /restore/path

# Розпакувати конкретний файл
tar -xzf backup.tar.gz etc/nginx/nginx.conf

ZIP архіви

# Створити zip архів
zip -r website.zip /var/www/html

# Створити zip виключаючи файли
zip -r backup.zip /home/user -x "*.tmp" "*.log"

# Розпакувати zip
unzip website.zip

# Список вмісту zip
unzip -l website.zip

# Розпакувати у конкретну директорію
unzip website.zip -d /var/www

Права доступу до файлів та безпека

Модель прав доступу

   Permission Groups   

  File: script.sh  

  -rwxr-xr--  

  User owner  

  rwx 7  

  Group owner  

  r-x 5  

  Others  

  r-- 4  

  Numeric: 754  

Значення прав доступу:

Права Двійковий Десятковий
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Управління правами доступу:

# Змінити права доступу до файлу (man chmod: https://man7.org/linux/man-pages/man1/chmod.1.html)
chmod 755 script.sh
chmod u+x,g-w,o-r file.txt

# Змінити власника файлу
chown user:group file.txt

# Змінити тільки групу
chgrp developers project/

# Рекурсивна зміна прав
chmod -R 644 /var/www/html
chown -R www-data:www-data /var/www

# Спеціальні права
chmod u+s /usr/bin/passwd  # setuid
chmod g+s /shared/project  # setgid
chmod +t /tmp              # sticky bit

Управління процесами

Життєвий цикл процесу

  Process Created  

  Running  

  Stopped  

  Ctrl+Z  

  Background  

  Terminated  

Команди процесів:

# Переглянути процеси
ps aux | grep nginx
ps -ef --forest  # деревоподібний вигляд

# Монітор процесів у реальному часі
top
htop  # краща альтернатива

# Фонові процеси
command &
nohup long-running-task.sh &

# Контроль завдань
jobs           # список фонових завдань
fg %1          # вивести завдання 1 на передній план
bg %1          # відновити завдання 1 у фоні
Ctrl+Z         # призупинити поточний процес

# Завершити процеси
kill PID
kill -9 PID    # примусове завершення
killall nginx  # завершити за іменем
pkill -f "python script.py"  # завершити за шаблоном

Моніторинг системи

Моніторинг ресурсів

# Використання диску
df -h           # використання файлової системи
du -sh /var/*   # розміри директорій
du -h --max-depth=1 /home

# Використання пам'яті
free -h
cat /proc/meminfo

# Інформація про CPU
lscpu
cat /proc/cpuinfo
nproc  # кількість процесорів

# Навантаження системи
uptime
cat /proc/loadavg

# Статистика I/O
iostat -x 1 5  # розширена статистика, інтервал 1 сек, 5 разів

Планування завдань

Cron vs Anacron

   Anacron laptops/desktops   

  /etc/anacrontab  

  anacron daemon  

  daily backup  

   Cron always-on systems   

  /etc/crontab  

  cron daemon  

  0 2 * * * backup  

Планування Cron:

# Редагувати користувацький crontab
crontab -e

# Список користувацького crontab
crontab -l

# Синтаксис Cron: хвилина година день місяць день_тижня команда (формат cron: https://man7.org/linux/man-pages/man5/crontab.5.html)
# Приклад: Запуск резервного копіювання о 2 ночі щодня
0 2 * * * /usr/local/bin/backup.sh

# Кожні 15 хвилин
*/15 * * * * /usr/local/bin/check-health.sh

# Перший день місяця о опівночі
0 0 1 * * /usr/local/bin/monthly-report.sh

# Робочі дні о 18:00
0 18 * * 1-5 /usr/local/bin/workday-task.sh

# Системний crontab
cat /etc/crontab

# Директорії Cron
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/

Конфігурація Anacron:

# Редагувати anacron
vim /etc/anacrontab

# Синтаксис: період затримка ідентифікатор_завдання команда
# Запуск щодня, затримка 5 хв
1 5 daily-backup /usr/local/bin/backup.sh

# Запуск щотижня, затримка 10 хв
7 10 weekly-cleanup /usr/local/bin/cleanup.sh

Процес завантаження та цілі

Потік завантаження системи

   System Targets   

  BIOS/UEFI  

  GRUB Bootloader  

  Linux Kernel  

  initramfs  

  Initial RAM disk  

  systemd  

  Init system  

  rescue.target  

  Single user  

  multi-user.target  

  CLI mode  

  graphical.target  

  GUI mode  

Управління цілями завантаження:

# Перевірити поточну ціль
systemctl get-default

# Список всіх цілей (документація systemd.target: https://www.freedesktop.org/software/systemd/man/systemd.target.html)
systemctl list-units --type=target

# Перейти в режим відновлення (однокористувацький)
systemctl isolate rescue.target

# Перейти в багатокористувацький режим (без GUI)
systemctl isolate multi-user.target

# Перейти в графічний режим
systemctl isolate graphical.target

# Встановити ціль за замовчуванням
systemctl set-default multi-user.target
systemctl set-default graphical.target

# Перезавантаження в іншу ціль
systemctl reboot --boot-loader-entry=rescue

Вимкнення та перезавантаження системи

# Вимкнути зараз
shutdown -h now
poweroff

# Перезавантажити зараз
shutdown -r now
reboot

# Заплановане вимкнення (через 5 хвилин)
shutdown -h +5 "System maintenance in 5 minutes"

# Заплановане перезавантаження (у конкретний час)
shutdown -r 23:00 "System update tonight"

# Скасувати заплановане вимкнення
shutdown -c

# Екстрене синхронізування та перезавантаження
sync && reboot

# Примусове негайне вимкнення (небезпечно)
echo b > /proc/sysrq-trigger

Кращі практики відновлення після збоїв

Стратегія резервного копіювання

   Backup Strategy   

  Production Data  

  Local Backup  

  Daily incremental  

  Off-site Backup  

  Weekly full  

  Cloud Backup  

  Real-time sync  

  Disaster Recovery  

  Tested restore  

Кращі практики резервного копіювання:

  1. Правило 3-2-1: 3 копії, 2 різних носії, 1 поза офісом
  2. Регулярне тестування: Перевіряйте, що резервні копії можна відновити
  3. Автоматизація: Використовуйте cron для запланованого резервного копіювання
  4. Шифрування: Шифруйте чутливі резервні копії
  5. Політика зберігання: Визначте, як довго зберігати резервні копії
  6. Документація: Задокументуйте процедури відновлення

Приклад скрипта резервного копіювання:

#!/bin/bash
# /usr/local/bin/backup.sh

BACKUP_DIR="/backup/$(date +%Y-%m-%d)"
RETENTION_DAYS=30

# Створити директорію для резервних копій
mkdir -p "$BACKUP_DIR"

# Резервне копіювання конфігураційних файлів
tar -czf "$BACKUP_DIR/etc-backup.tar.gz" /etc

# Резервне копіювання домашніх директорій
tar -czf "$BACKUP_DIR/home-backup.tar.gz" /home

# Резервне копіювання бази даних
mysqldump -u root -p"$DB_PASSWORD" --all-databases | gzip > "$BACKUP_DIR/mysql.sql.gz"

# Видалити старі резервні копії
find /backup -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;

# Синхронізація на віддалений сервер
rsync -avz /backup/ backup-server:/remote/backup/

Кращі практики для Production

  1. Управління файловою системою:

    • Моніторити використання диску з попередженнями при 80% заповненості
    • Використовувати LVM для гнучкого управління сховищем
    • Впровадити ротацію логів для запобігання переповненню диску
  2. Управління процесами:

    • Використовувати systemd для управління сервісами
    • Моніторити критичні процеси за допомогою supervisor/monit
    • Встановлювати обмеження ресурсів у /etc/security/limits.conf
  3. Безпека:

    • Застосовувати принцип найменших привілеїв
    • Регулярно аудитувати права доступу до файлів
    • Використовувати sudo замість входу як root
    • Увімкнути SELinux або AppArmor
  4. Моніторинг:

    • Налаштувати централізоване логування (rsyslog, ELK stack)
    • Моніторити метрики системи (CPU, пам'ять, диск, мережа)
    • Створити попередження для аномальних умов
  5. Автоматизація:

    • Автоматизувати повторювані завдання за допомогою cron/systemd timers
    • Використовувати управління конфігурацією (Ansible, Puppet)
    • Впровадити інфраструктуру як код

Усунення поширених проблем

Високе використання диску:

# Знайти найбільші директорії
du -h / | sort -rh | head -10

# Знайти великі файли
find / -type f -size +100M -exec ls -lh {} \;

# Очистити кеш пакетів
apt clean
yum clean all

Високе навантаження:

# Перевірити запущені процеси
top
ps aux --sort=-%cpu | head -10

# Перевірити очікування I/O
iostat -x 1

# Перевірити активність диску
iotop

Проблеми з правами доступу:

# Виправити права доступу до веб-директорії
chown -R www-data:www-data /var/www
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;

Висновок

Основи адміністрування системи Linux охоплюють операції з файловою системою, управління процесами, безпеку, планування та відновлення після збоїв. Розуміння ієрархії файлової системи, опанування операцій з файлами, ефективне управління процесами та впровадження надійних стратегій резервного копіювання є необхідними для надійного адміністрування системи.

Вибирайте відповідні інструменти для кожного завдання: використовуйте find для пошуку файлів, tar для резервного копіювання, cron для планування та systemd для управління сервісами. Регулярний моніторинг, автоматизація та задокументовані процедури забезпечують надійність системи та швидке відновлення після збоїв.


Часті запитання

П: Що таке стандарт ієрархії файлової системи (FHS)?

FHS визначає стандартну структуру директорій Linux: /bin для основних команд, /etc для конфігурацій, /home для домашніх директорій користувачів, /var для змінних даних, /tmp для тимчасових файлів. Дотримання FHS забезпечує сумісність між дистрибутивами, передбачувані місця розташування файлів та правильну роботу скриптів.

П: Як працюють дозволи файлів у Linux?

Linux використовує трьохрівневі дозволи: user (власник), group (група), others (інші) з дозволами read (4), write (2), execute (1). chmod 755 означає: власник rwx (7), група rx (5), інші rx (5). Використовуйте chmod для зміни дозволів, chown для зміни власника. Біти SUID/SGID/sticky надають спеціальну поведінку.

П: Яка різниця між процесами та демонами?

Процеси - це екземпляри програм, що виконуються, з PID та станом виконання. Демони - це фонові процеси, що працюють без взаємодії з користувачем, зазвичай керовані systemd. Приклади демонів: sshd, nginx, cron. Використовуйте ps aux для перегляду процесів, systemctl для управління демонами. Процеси можуть бути інтерактивними; демони завжди фонові.

П: Як створити та планувати завдання cron?

Редагуйте crontab за допомогою crontab -e. Формат: хвилина година день місяць день_тижня команда. Приклад: 0 2 * * * /backup.sh виконується о 2:00 щодня. Використовуйте спеціальні рядки: @daily, @hourly, @reboot. Системні cron-завдання йдуть в /etc/cron.d/. Завжди перенаправляйте вивід або логуйте для усунення проблем.

П: Що таке systemd та як він керує сервісами?

Systemd - це сучасна система ініціалізації Linux, що керує завантаженням системи, сервісами та залежностями. Замінив SysVinit. Unit-файли визначають сервіси в /etc/systemd/system/. Використовуйте systemctl для старту/зупинки (systemctl start nginx), увімкнення при завантаженні (systemctl enable), перегляду статусу. Systemd обробляє паралельне завантаження, активацію за запитом та відновлення після збоїв.

П: Як роблять резервні копії директорій у Linux?

Використовуйте tar для стиснутих архівів: tar czf backup.tar.gz /var/www для створення, tar xzf backup.tar.gz для відновлення. rsync синхронізує директорії: rsync -av source/ dest/ для локального, rsync -av /data user@server:/backup для віддаленого. Включайте мітки часу в імена backup-$(date +%Y%m%d).tar.gz. Перевіряйте backup'и регулярно з test restore.

П: Яка різниця між hard link та soft link (symlink)?

Hard link - це ще одна назва файлу, що вказує на ті самі inode дані; видалення оригіналу зберігає дані. Soft link (symlink) - це окремий файл, що містить шлях; видалення оригіналу руйнує symlink. Створюйте hard link з ln file hardlink, symlink з ln -s target symlink. Symlink'и працюють між файловими системами; hard link'и ні.