← Назад к вопросам
Как посмотреть свободное место на диске в Linux?
1.0 Junior🔥 101 комментариев
#DevOps и инфраструктура
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Проверка свободного места на диске в Linux
Это базовая, но критическая операция для администрирования серверов и отладки приложений. Есть множество инструментов и подходов.
1. df — основная команда
Самая распространённая команда для проверки дискового пространства:
# Базовая команда
df
# Вывод:
# Filesystem 1K-blocks Used Available Use% Mounted on
# /dev/sda1 1048576 524288 524288 50% /
# /dev/sdb1 2097152 1048576 1048576 50% /home
# С понятным форматом (GB, MB, KB)
df -h
# Вывод:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 1.0G 500M 500M 50% /
# /dev/sdb1 2.0G 1.0G 1.0G 50% /home
# Только информация о конкретной точке монтирования
df -h /home
# Filesystem Size Used Avail Use% Mounted on
# /dev/sdb1 2.0G 1.0G 1.0G 50% /home
# Показать файловые системы (типы)
df -T
# Filesystem Type 1K-blocks Used Available Use%
# /dev/sda1 ext4 1048576 524288 524288 50%
# Показать только локальные файловые системы (исключить сетевые)
df -l
# Показать в инодах (количество файлов, не размер)
df -i
# Filesystem Inodes IUsed IFree IUse% Mounted on
# /dev/sda1 131072 65536 65536 50% /
Интерпретация вывода:
- Size: общий размер раздела
- Used: использовано
- Avail: доступно для использования (может быть меньше Free)
- Use%: процент используемого пространства
2. du — глубокий анализ использования
Для поиска, что занимает место на диске:
# Размер текущей директории
du
# Вывод:
# 4 ./subdir1
# 8 ./subdir2
# 12 .
# С понятным форматом
du -h
# 4.0K ./subdir1
# 8.0K ./subdir2
# 12K .
# Только итоговый размер директории
du -sh /home
# 512G /home
# Размер каждого подкаталога (не рекурсивно)
du -sh /home/*
# 100G /home/user1
# 150G /home/user2
# 250G /home/user3
# Найти 10 самых больших директорий
du -sh /* | sort -hr | head -10
# 512G /home
# 256G /var
# 100G /usr
# 50G /root
# Рекурсивный анализ всех подполапок
du -h --max-depth=2 /home
# 100G /home/user1
# 50G /home/user1/documents
# 40G /home/user1/videos
# Исключить определённые директории
du -h --exclude="node_modules" --exclude=".git" /myapp
3. Быстрые одноленеры для анализа
# Процент использования диска (проверить, не переполнен ли)
df -h | grep -E '(^Filesystem|/$)'
# Показать только диски с более чем 80% заполнением
df -h | awk '$5 > "80%" {print}'
# Найти все файлы больше 1GB
find / -size +1G -type f 2>/dev/null
# Найти все файлы больше 100MB в /home
find /home -size +100M -type f 2>/dev/null | sort -k1 -hr
# Размер логов
du -sh /var/log/*
# Проверить занятое место в /tmp
du -sh /tmp
# Размер БД
du -sh /var/lib/mysql
4. ncdu — интерактивный анализатор
Удобный инструмент для визуального анализа:
# Установка
sudo apt-get install ncdu # Debian/Ubuntu
sudo yum install ncdu # RHEL/CentOS
# Анализ директории
ncdu /home
# Результат: интерактивное меню, где можно:
# - стрелками вверх/вниз навигироваться
# - Enter для входа в папку
# - d удалить файл (безопасно, спросит)
# - ? справка
5. lsof — поиск открытых файлов, занимающих место
Помогает найти файлы, которые удалены, но ещё открыты процессом:
# Показать все открытые файлы
lsof | grep deleted
# Это часто причина, когда место не освобождается после удаления
# Пример: логи, которые не удаляются полностью
sudo lsof | grep /var/log | grep deleted
# Решение: перезагрузить процесс, держащий файл открытым
6. Мониторинг в реальном времени
# Watch команда для отслеживания изменений
watch -n 5 'df -h'
# Обновляет df каждые 5 секунд
# Аналитика дискового I/O
iostat -h 1 5
# Показывает 5 записей с интервалом в 1 сек
7. Python: программный доступ
import os
import shutil
import psutil
# Способ 1: shutil
stat = shutil.disk_usage("/")
print(f"Total: {stat.total / (1024**3):.2f} GB")
print(f"Used: {stat.used / (1024**3):.2f} GB")
print(f"Free: {stat.free / (1024**3):.2f} GB")
# Способ 2: psutil (современный способ)
import psutil
usage = psutil.disk_usage("/")
print(f"Total: {usage.total / (1024**3):.2f} GB")
print(f"Used: {usage.used / (1024**3):.2f} GB")
print(f"Free: {usage.free / (1024**3):.2f} GB")
print(f"Percent: {usage.percent}%")
# Все смонтированные разделы
for partition in psutil.disk_partitions():
print(f"\nDevice: {partition.device}")
print(f"Mount point: {partition.mountpoint}")
try:
usage = psutil.disk_usage(partition.mountpoint)
print(f"Used: {usage.percent}%")
except PermissionError:
print("Permission denied")
# Способ 3: os.statvfs (низкоуровневый)
stat = os.statvfs("/")
block_size = stat.f_frsize
total = stat.f_blocks * block_size
available = stat.f_bavail * block_size
used = (stat.f_blocks - stat.f_bfree) * block_size
print(f"Total: {total / (1024**3):.2f} GB")
print(f"Used: {used / (1024**3):.2f} GB")
print(f"Available: {available / (1024**3):.2f} GB")
8. Мониторинг дискового пространства
# alert_disk_space.py
import psutil
import logging
logging.basicConfig(level=logging.WARNING)
def check_disk_space(threshold=80):
\"\"\"Проверить, не превышает ли использование порог\"\"\"
for partition in psutil.disk_partitions():
if partition.fstype == '':
continue
try:
usage = psutil.disk_usage(partition.mountpoint)
if usage.percent >= threshold:
logging.warning(
f"Disk {partition.device} at {usage.percent}% capacity. "
f"Only {usage.free / (1024**3):.2f} GB free."
)
except PermissionError:
pass
if __name__ == "__main__":
check_disk_space(threshold=80)
9. Очистка дискового пространства
# Очистить временные файлы
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# Очистить кэш пакетного менеджера
sudo apt-get clean # Debian/Ubuntu
sudo yum clean all # RHEL/CentOS
# Очистить старые логи (старше 7 дней)
find /var/log -type f -mtime +7 -delete
# Сжать логи
sudo gzip /var/log/*.log
# Очистить журнал systemd (старше 1 месяца)
sudo journalctl --vacuum=time=1month
# Очистить Docker образы и контейнеры
sudo docker system prune -a # Осторожно!
# Очистить npm кэш
npm cache clean --force
# Очистить pip кэш
pip cache purge
10. Примеры для DevOps
# Алёрт для мониторинга (Nagios/Zabbix)
#!/bin/bash
USED=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USED" -gt 90 ]; then
echo "CRITICAL: Disk usage at ${USED}%"
exit 2
elif [ "$USED" -gt 80 ]; then
echo "WARNING: Disk usage at ${USED}%"
exit 1
else
echo "OK: Disk usage at ${USED}%"
exit 0
fi
# Скрипт для ежедневной проверки
0 8 * * * /usr/local/bin/check_disk.sh | mail -s "Daily Disk Report" admin@example.com
Практический пример: поиск места для очистки
#!/bin/bash
# find_large_files.sh
echo "=== Disk Usage Summary ==="
df -h /
echo "\n=== Top 10 Largest Directories ==="
du -sh /* 2>/dev/null | sort -hr | head -10
echo "\n=== Top 20 Largest Files ==="
find / -type f -size +100M 2>/dev/null | xargs du -h | sort -hr | head -20
echo "\n=== Old Log Files (>30 days) ==="
find /var/log -type f -mtime +30 2>/dev/null | head -20
Сравнение команд
| Команда | Цель | Пример |
|---|---|---|
| df | Общее использование | df -h |
| du | Размер директорий | du -sh /home |
| ncdu | Визуальный анализ | ncdu /home |
| lsof | Открытые файлы | lsof | grep deleted |
| find | Поиск больших файлов | find / -size +1G |
Итог
Для быстрой проверки:
df -h # Общий обзор
du -sh /home # Размер конкретной папки
Для детального анализа:
du -sh /* | sort -hr # Топ папок
find / -size +1G # Большие файлы
ncdu / # Интерактивный анализ
В Python:
import psutil
usage = psutil.disk_usage("/")
print(f"{usage.percent}% used") # Процент