- Вступ
- Серія Linux Administration
- Ієрархія файлової системи Linux
- Основні операції з файлами
- Посилання: жорсткі посилання vs символічні посилання
- Перенаправлення введення/виведення
- Архівування та стиснення
- Права доступу до файлів та безпека
- Управління процесами
- Моніторинг системи
- Планування завдань
- Процес завантаження та цілі
- Вимкнення та перезавантаження системи
- Кращі практики відновлення після збоїв
- Кращі практики для Production
- Усунення поширених проблем
- Висновок
- Часті запитання
Вступ
Адміністрування Linux вимагає глибокого розуміння файлових систем, управління процесами, безпеки та системних операцій. Цей всебічний посібник охоплює основні навички адміністрування Linux від операцій з файлами до моніторингу процесів, планування завдань та відновлення після збоїв.
Ми розглянемо ієрархію файлової системи Linux, команди для роботи з файлами, управління процесами, права доступу, стратегії архівування та інструменти моніторингу системи. Кожен розділ містить практичні приклади та кращі практики для production.
Серія Linux Administration
📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.
Це Частина I нашого комплексного 7-частинного посібника з адміністрування Linux:
- Частина I: Файлова система та управління процесами ← Ви тут
- Частина II: Аутентифікація користувачів та LDAP →
- Частина III: Фаєрвол UFW та мережі
- Частина IV: systemd та SSH Hardening
- Частина V: Поштовий сервер Postfix
- Частина VI: Віртуалізація QEMU KVM
- Частина VII: Сховище LVM та RAID
Ієрархія файлової системи Linux
Архітектура файлової системи
Файлова система Linux має ієрархічну структуру, що починається з кореневої директорії (/), як визначено в Filesystem Hierarchy Standard.
Ключові директорії:
/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 символічні посилання
Порівняння типів посилань
Створення посилань:
# Створити символічне посилання (найпоширеніше)
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 | Той самий що й оригінал | Інший |
Перенаправлення введення/виведення
Стандартні потоки
Приклади перенаправлення:
# Перенаправлення 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
Права доступу до файлів та безпека
Модель прав доступу
Значення прав доступу:
| Права | Двійковий | Десятковий |
|---|---|---|
--- |
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
Управління процесами
Життєвий цикл процесу
Команди процесів:
# Переглянути процеси
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
Планування 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
Процес завантаження та цілі
Потік завантаження системи
Управління цілями завантаження:
# Перевірити поточну ціль
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
Кращі практики відновлення після збоїв
Стратегія резервного копіювання
Кращі практики резервного копіювання:
- Правило 3-2-1: 3 копії, 2 різних носії, 1 поза офісом
- Регулярне тестування: Перевіряйте, що резервні копії можна відновити
- Автоматизація: Використовуйте cron для запланованого резервного копіювання
- Шифрування: Шифруйте чутливі резервні копії
- Політика зберігання: Визначте, як довго зберігати резервні копії
- Документація: Задокументуйте процедури відновлення
Приклад скрипта резервного копіювання:
#!/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
-
Управління файловою системою:
- Моніторити використання диску з попередженнями при 80% заповненості
- Використовувати LVM для гнучкого управління сховищем
- Впровадити ротацію логів для запобігання переповненню диску
-
Управління процесами:
- Використовувати systemd для управління сервісами
- Моніторити критичні процеси за допомогою supervisor/monit
- Встановлювати обмеження ресурсів у
/etc/security/limits.conf
-
Безпека:
- Застосовувати принцип найменших привілеїв
- Регулярно аудитувати права доступу до файлів
- Використовувати sudo замість входу як root
- Увімкнути SELinux або AppArmor
-
Моніторинг:
- Налаштувати централізоване логування (rsyslog, ELK stack)
- Моніторити метрики системи (CPU, пам'ять, диск, мережа)
- Створити попередження для аномальних умов
-
Автоматизація:
- Автоматизувати повторювані завдання за допомогою 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'и ні.