Команда Linux lsof

Linux 命令大全Энциклопедия команд Linux


Мощный инструмент командной строки, используемый для вывода списка всех открытых файлов и связанной информации о процессах в текущей системе. В Linux философия «всё есть файл» означает, что lsof может отображать не только обычные файлы, но также сетевые соединения, файлы устройств, каналы, сокеты и многое другое.


Базовый синтаксис lsof

lsof [选项] [文件名或目录]

Описание распространённых параметров опций

Опция Описание
-a Использовать логику AND для объединения нескольких условий
-c <进程名> Показать файлы, открытые указанным процессом
-d <文件描述符> Показать файлы с указанным файловым дескриптором
-i Показать информацию, связанную с сетевыми соединениями
-n Не разрешать имена хостов (показывать IP-адреса)
-P Не разрешать имена портов (отображать номера портов)
-p <PID> Показать файлы, открытые указанным ID процесса
-u <用户名> Показать файлы, открытые указанным пользователем
+D <目录> Рекурсивно отобразить файлы, открытые внутри каталога
-t Выводить только ID процессов (подходит для скриптов)

Примеры типовых операций

1. Просмотреть все открытые файлы

lsof

Здесь перечислены все файлы, открытые в системе, включая обычные файлы, каталоги, файлы библиотек, устройства, сетевые соединения и т. д.

2. Просмотреть файлы, открытые указанным процессом

Пример

lsof -p 1234  # Просмотреть файлы, открытые процессом с PID 1234
lsof -c nginx # Просмотреть файлы, открытые всеми процессами nginx

3. Просмотреть сетевые соединения

Пример

lsof -i      # Просмотреть все сетевые соединения
lsof -i :80  # Просмотр всех соединений, использующих порт 80
lsof -i TCP  # Просмотр всех TCP-соединений

4. Просмотр файлов, открытых пользователем

lsof -u root  # 查看 root 用户打开的文件

5. Поиск файлов, которые удалены, но всё ещё заняты процессами

lsof | grep deleted

Такая ситуация часто возникает, когда файлы журналов удалены, но служба всё ещё работает, из-за чего дисковое пространство не освобождается.

6. Просмотр файлов, открытых в указанном каталоге

lsof +D /var/log  # 查看 /var/log 目录下被打开的文件

Пояснение полей вывода

Типичные столбцы в выводе команды lsof:

COMMAND    PID   USER   FD      TYPE     DEVICE  SIZE/OFF    NODE NAME
  • COMMAND: имя процесса
  • PID: Идентификатор процесса
  • USER: Пользователь, запустивший процесс
  • FD: Дескриптор файла
    • cwd: Текущий рабочий каталог
    • txt: Файл программного кода
    • mem: Файл, отображённый в память
    • 0u、1u、2u: Стандартный ввод, вывод, ошибки
  • TYPE: Тип файла (REG обычный файл, DIR каталог, CHR символьное устройство и т. д.)
  • DEVICE: Номер устройства
  • SIZE/OFF: Размер файла или смещение
  • NODE: Номер inode файла
  • NAME: Имя файла или точка монтирования

Расширенные варианты использования

1. Поиск процессов, занимающих порт

lsof -i :8080

Когда вы хотите запустить сервис, но порт уже занят, эта команда позволяет быстро найти процесс, занимающий порт.

2. Восстановление удалённых файлов

Когда файл удалён, но всё ещё используется процессом, его можно восстановить через файловую систему /proc:

Пример

lsof | grep deleted  # Найти удалённый файл и процесс
ls -l /proc//fd  # Просмотреть файловые дескрипторы процесса
cp /proc//fd/ /path/to/recovery  # Восстановить файл

3. Мониторинг доступа к файлам

watch -n 1 'lsof /path/to/file'

Это позволяет в реальном времени отслеживать, какие процессы обращаются к определённому файлу.


Решения типичных проблем

1. Недостаточно места на диске, но не удаётся найти большие файлы

lsof | grep deleted

Найдите файлы, которые удалены, но всё ещё заняты процессами, затем перезапустите связанные процессы, чтобы освободить место.

2. Не удаётся размонтировать устройство

lsof /mount/point

Найдите, какие процессы используют точку монтирования, закройте эти процессы и затем размонтируйте.

3. Диагностика проблем сетевого подключения

lsof -i -n -P

Просмотрите все сетевые подключения, чтобы помочь диагностировать конфликты портов или проблемы с подключением.


Соображения производительности

Хотя lsof — мощный инструмент, нужно быть осторожным при его использовании в загруженной производственной среде:

  1. Запуск напрямуюlsofпросканирует всю систему и может потреблять много ресурсов
  2. Старайтесь использовать точные условия фильтрации (например,-p、-u、-iи т. д.) чтобы сузить область запроса
  3. При использовании в скриптах,-tпараметр выводит только PID, уменьшая накладные расходы на разбор.

Альтернативные инструменты

Хотя lsof — наиболее часто используемый инструмент, в некоторых сценариях можно рассмотреть альтернативы:

  1. fuser: быстро посмотреть, какие процессы используют конкретный файл или сокет
  2. ss/netstat: специально для информации о сетевых соединениях
  3. ps: в сочетании с/procфайловой системой также можно получить некоторую информацию.

Итог

lsof — это швейцарский армейский нож для системных администраторов и разработчиков Linux. Освоение его может помочь вам:

  1. Быстро находить проблемы с занятостью ресурсов
  2. Устранять неполадки, связанные с файлами и сетью
  3. Понимать состояние работы системы
  4. Решать различные проблемы "файл используется"

Рекомендуется больше практиковаться в повседневной работе, гибко использовать различные параметры опций в зависимости от конкретных сценариев и постепенно раскрывать весь потенциал этого мощного инструмента.


Linux 命令大全Энциклопедия команд Linux

Другие расширения