Linux: "Какой процесс держит этот файл?" Магия lsof
Классическая ситуация: вы пытаетесь отмонтировать диск, а система говорит: "Resource busy". Или порт занят, а netstat/ss не показывают, кем. Вместо перезагрузки архитектор использует скальпель.
lsof (List Open Files) — это фундаментальная утилита, которая показывает, какой процесс какой файл (или сокет, или библиотеку) держит открытым. В мире *nix "всё есть файл", поэтому lsof видит всё.
Три команды, которые решают 90% проблем:
Узнать, кто "держит" файл или папку:
Bash
Узнать, какой процесс слушает порт (альтернатива ss -tlpn):
Bash
Посмотреть, что делает конкретный пользователь или процесс:
Bash
Взгляд архитектора: lsof — это инструмент диагностики и отладки. Он позволяет понять внутренние связи в системе. Умение им пользоваться — это не просто "починить", а понять коренную причину (root cause) проблемы, будь то утечка файловых дескрипторов или конфликт портов.
#linux #lsof #diagnostics #sre #команды
Классическая ситуация: вы пытаетесь отмонтировать диск, а система говорит: "Resource busy". Или порт занят, а netstat/ss не показывают, кем. Вместо перезагрузки архитектор использует скальпель.
lsof (List Open Files) — это фундаментальная утилита, которая показывает, какой процесс какой файл (или сокет, или библиотеку) держит открытым. В мире *nix "всё есть файл", поэтому lsof видит всё.
Три команды, которые решают 90% проблем:
Узнать, кто "держит" файл или папку:
Bash
# Кто мешает отмонтировать /mnt/data?
lsof /mnt/data
Узнать, какой процесс слушает порт (альтернатива ss -tlpn):
Bash
# Кто занял 80-й порт?
sudo lsof -i :80
Посмотреть, что делает конкретный пользователь или процесс:
Bash
# Что открыл пользователь 'www-data'?
sudo lsof -u www-data
# Какие файлы и сокеты открыты у процесса с PID 1234?
sudo lsof -p 1234
Взгляд архитектора: lsof — это инструмент диагностики и отладки. Он позволяет понять внутренние связи в системе. Умение им пользоваться — это не просто "починить", а понять коренную причину (root cause) проблемы, будь то утечка файловых дескрипторов или конфликт портов.
#linux #lsof #diagnostics #sre #команды
Linux: "Куда делся диск?" Скрипт для поиска "призрачных" файлов
Боль: Вы запускаете
Ответ: Это "файлы-призраки". Процесс (например,
Реакция админа: reboot сервера.
Реакция архитектора: Найти "призрака" с
Этот Bash-скрипт использует
Код скрипта:
Bash
Как использовать:
1. Сохраните как find_ghosts.sh и chmod +x find_ghosts.sh.
2. sudo ./find_ghosts.sh
3. Результат: Вы увидите, что PID 1234 (java) держит файл app.log (deleted) размером 10240 MB.
4. Решение: systemctl restart java-app.service. (Перезапуск процесса, а не всего сервера).
Взгляд архитектора: Вы не "гадаете", вы диагностируете. Вы понимаете, как VFS (Virtual File System) в Linux работает с
#linux #bash #sre #diagnostics #lsof #storage #скрипты #гайд
Боль: Вы запускаете
df -h и видите Use% 99% на разделе /var. Вы запускаете du -sh /var... и он показывает, что занято только 50%. Где остальные 49%?!Ответ: Это "файлы-призраки". Процесс (например,
nginx или java`) держит лог-файл открытым, а `logrotate в это время его rm (удалил). Файл исчез с диска, но пространство не освободится, пока процесс держит его "в памяти".Реакция админа: reboot сервера.
Реакция архитектора: Найти "призрака" с
lsof и освободить место без перезагрузки.Этот Bash-скрипт использует
lsof для поиска всех файлов, которые помечены как (deleted) , но все еще удерживаются процессами.Код скрипта:
Bash
#!/bin/bash
# --- Поиск "призрачных" файлов (deleted but held open) ---
echo "--- Начинаю поиск файлов, удаленных, но удерживаемых процессами... ---"
echo "PID USER COMMAND SIZE(MB) FILE"
echo "----------------------------------------------------------------------"
# 1. lsof +L1: Найти файлы с link count < 1 (классический "призрак")
# 2. awk: Форматируем вывод, чтобы показать PID, User, Command, Size
# 3. sort: Сортируем по размеру (7-е поле, numeric-reverse)
# 4. head: Показываем топ-15
lsof +L1 -n | \
awk '
{
size_mb = $7 / (1024*1024);
if (size_mb > 1) {
printf "%-7s %-10s %-15s %-10.2f %s\n", $2, $3, $1, size_mb, $9
}
}' | \
sort -k4 -nr | \
head -n 15
Как использовать:
1. Сохраните как find_ghosts.sh и chmod +x find_ghosts.sh.
2. sudo ./find_ghosts.sh
3. Результат: Вы увидите, что PID 1234 (java) держит файл app.log (deleted) размером 10240 MB.
4. Решение: systemctl restart java-app.service. (Перезапуск процесса, а не всего сервера).
Взгляд архитектора: Вы не "гадаете", вы диагностируете. Вы понимаете, как VFS (Virtual File System) в Linux работает с
inode и file descriptors . Это глубокое знание системы, которое отличает инженера от "эникейщика".#linux #bash #sre #diagnostics #lsof #storage #скрипты #гайд
🔥2
🕵️♂️ Linux: Кто занял порт? Кто держит файл? (lsof)
Классика: вы пытаетесь перезапустить Nginx, а он кричит: "Address already in use". Или пытаетесь размонтировать флешку, а Linux говорит: "Device is busy". Не гадайте. Вызывайте детектива — lsof (List Open Files).
1. Кто слушает порт 80?
Вывод покажет PID процесса. Можно сразу его убить.
2. Кто держит файл или папку? Если не дает удалить папку /var/www, узнайте, кто в ней сидит:
3. Что делает конкретный юзер?
В Linux "всё есть файл" (и сокеты, и библиотеки). Поэтому
#linux #cli #lsof #troubleshooting #sysadmin #tips
Классика: вы пытаетесь перезапустить Nginx, а он кричит: "Address already in use". Или пытаетесь размонтировать флешку, а Linux говорит: "Device is busy". Не гадайте. Вызывайте детектива — lsof (List Open Files).
1. Кто слушает порт 80?
lsof -i :80
Вывод покажет PID процесса. Можно сразу его убить.
2. Кто держит файл или папку? Если не дает удалить папку /var/www, узнайте, кто в ней сидит:
lsof +D /var/www
3. Что делает конкретный юзер?
lsof -u username
В Linux "всё есть файл" (и сокеты, и библиотеки). Поэтому
lsof видит вообще всё.#linux #cli #lsof #troubleshooting #sysadmin #tips
🐧 Linux: Спасаем диск от Ghost Files (удаленные, но занятые файлы)
Бывает так: df -h говорит, что диск забит на 100%, но du -sh показывает, что папки занимают всего пару гигабайт. Куда делось место? Скорее всего, какой-то процесс (например, nginx или база данных) держит открытым файл, который вы уже удалили командой rm. В Linux файл не удалится физически, пока его держит процесс.
Как найти этих "призраков":
Что делать: Вы увидите список файлов с пометкой (deleted). Вместо того чтобы убивать процесс (что критично для продакшена), можно просто "обнулить" дескриптор файла:
Место освободится мгновенно без рестарта сервиса.
#linux #sysadmin #troubleshooting #storage #lsof #filesystems
Бывает так: df -h говорит, что диск забит на 100%, но du -sh показывает, что папки занимают всего пару гигабайт. Куда делось место? Скорее всего, какой-то процесс (например, nginx или база данных) держит открытым файл, который вы уже удалили командой rm. В Linux файл не удалится физически, пока его держит процесс.
Как найти этих "призраков":
lsof +L1
Что делать: Вы увидите список файлов с пометкой (deleted). Вместо того чтобы убивать процесс (что критично для продакшена), можно просто "обнулить" дескриптор файла:
truncate -s 0 /proc/[PID]/fd/[FD_NUMBER]
Место освободится мгновенно без рестарта сервиса.
#linux #sysadmin #troubleshooting #storage #lsof #filesystems
👍2
🐧 Linux: Кто держит мой файл и не дает его удалить?
Привет, коллеги! Пятница, 20 марта. Ситуация классическая: ты пытаешься размонтировать диск или удалить огромный старый лог, а система выдает Device or resource busy. В 2026 году, когда на одном сервере крутится сотня контейнеров и сервисов, искать виновника вручную — это как искать иголку в стоге сена.
Практика:
Зачем это нужно:
#linux #lsof #troubleshooting #admin_future
Привет, коллеги! Пятница, 20 марта. Ситуация классическая: ты пытаешься размонтировать диск или удалить огромный старый лог, а система выдает Device or resource busy. В 2026 году, когда на одном сервере крутится сотня контейнеров и сервисов, искать виновника вручную — это как искать иголку в стоге сена.
Используй lsof (LiSt Open Files). Это твой рентген для файловой системы. Он покажет всё: какой процесс открыл файл, какой у него PID и что он с ним делает.
Практика:
# Найти процесс, который занял конкретный файл
lsof /var/log/nginx/access.log
# Посмотреть всё, что открыто в конкретной папке (удобно при размонтировании)
lsof +D /mnt/data/
# Узнать, какие сетевые файлы открыты конкретным пользователем
lsof -u admin -i
Зачем это нужно:
Для скорости. Вместо того чтобы гадать и перезапускать сервисы наугад, ты за одну секунду находишь PID процесса и решаешь, что с ним делать — подождать или культурно убить через kill. В пятницу вечером каждая сэкономленная минута приближает тебя к отдыху.
#linux #lsof #troubleshooting #admin_future
🔥2