Как `lsof` отслеживать имена файлов открытых файловых дескрипторов?

Я заметил, что если файл переименован, lsof отображает новое имя.

Чтобы проверить это, python скрипт python :

 #!/bin/python import time f = open('foo.txt', 'w') while True: time.sleep(1) 

Видел, что lsof следует за переименованием:

 $ python test_lsof.py & [1] 19698 $ lsof | grep foo | awk '{ print $2,$9 }' 19698 /home/bfernandez/foo.txt $ mv foo{,1}.txt $ lsof | grep foo | awk '{ print $2,$9 }' 19698 /home/bfernandez/foo1.txt 

Понятно, что это может быть через номер inode . Чтобы проверить это, я создал жесткую ссылку на файл. Однако lsof прежнему отображает исходное имя:

 $ ln foo1.txt foo1.link $ stat -c '%n:%i' foo* foo1.link:8429704 foo1.txt:8429704 $ lsof | grep foo | awk '{ print $2,$9 }' 19698 /home/bfernandez/foo1.txt 

И, если я удалю исходный файл, lsof просто перечисляет файл как удаленный, хотя есть еще существующая жесткая ссылка на него:

 $ rm foo1.txt rm: remove regular empty file 'foo1.txt'? y $ lsof | grep foo | awk '{ print $2,$9,$10 }' 19698 /home/bfernandez/foo1.txt (deleted) 

Итак, наконец …

Мой вопрос

Какой метод используется для отслеживания открытых файловых дескрипторов, которые позволяют:

  1. Следите за изменениями в имени файла
  2. Не знать о существующих жестких ссылках

One Solution collect form web for “Как `lsof` отслеживать имена файлов открытых файловых дескрипторов?”

  1. Вы правы, полагая, что lsof использует inode из кеша имен ядра. Под платформами Linux имя пути предоставляется файловой системой Linux /proc .

  2. Обработка жестких ссылок лучше объясняется в FAQ :

3.3.4 Почему не сообщается «правильное» жесткое связанное имя пути к файлу?

Когда lsof сообщает самый правый компонент имени пути для файла с жесткими ссылками, компонент может поступать из кеша имени ядра. Поскольку ключ, который соединяет открытый файл с кешем имени ядра, может быть одинаковым для каждой именованной жесткой ссылки, lsof может сообщать только одно имя для всех открытых файлов с жесткой привязкой . Иногда это будет «правильным» в глазах смотрящего; иногда это не так. Помните, что идентификационные ключи файла, значимые для ядра, – это номера устройств и узлов, и они одинаковы для всех жестко связанных имен.

Тот факт, что удаленный узел отображается вообще, также специфичен для Linux (и более поздних версий Solaris 10, согласно тем же FAQ ).

  • понимание lsof во время длительной операции над большим файлом
  • Статистика «Memcache» сообщает о ненулевых «curr_connections», но lsof не показывает соединений сокетов
  • Почему syslog-трафик не отображается в netstat и lsof?
  • lsof -p PID vs lsof | grep PID
  • ошибка памяти в lsof
  • Как указать количество открытых дескрипторов файлов по процессам для всех процессов в Unix?
  • lsof - отладить выходную информацию
  • Как использовать lsof для идентификации входящих TCP-соединений?
  • Отображаются ли все открытые файлы в формате lsof?
  • Альтернативы для команды lsof?
  • Определение того, какой процесс связан с портом
  • Interesting Posts

    Кто-нибудь хотел бы помочь мне начать страницу в Википедии «Список раскручиваемых выпусков Linux Distribustions»?

    Ошибки задержки загрузки?

    и летнее время

    Сравнение двух каталогов на разных серверах

    Как перевести время из часового пояса в Сиднейский часовой пояс с помощью оболочки korn?

    альтернативный подход для выборочных удалений из дерева rsnapshot с поиском?

    Как удалить весь набор файлов в случайном порядке?

    беспроводной отключается аппаратным переключателем, даже если нет

    Инструмент для сравнения 2 листов excel в linux

    Почему Tomcat не появляется, когда я выводил grep netstat на 8080?

    Почему google-chrome-stable требует libX11.so.6 () (64 бит), но это требование не может быть предоставлено?

    Использование утилиты «Найти» – неправильный шаблон?

    Можно ли настроить QEMU / KVM + OCFS2 для пробивания отверстий в разреженных файлах изображений, когда файлы удаляются в гостевой системе?

    Используйте imagemagick для преобразования непрозрачного цвета в альфа

    debian тестирование зависает при пробуждении из s2disk / hibernate

    Linux и Unix - лучшая ОС в мире.