Как выявить приложение которое обращается к файлу
Зачастую пользователям и системным администратором необходимо отслеживать, к каким файлам обращается приложение. В Linux-е уже есть все средства для этого, и тем удивительнее постоянно слышать на форумах — есть ли аналог Sysinternal Filemon. В данной статье я опишу использование утилиты strace, и рассмотрю ряд моментов, которые ускользают от некоторых пользователей, полагающих, что приложениям надо ограничивать права даже на чтение, например, ограничить доступ mplayer-а только к показываемому фильму.
strace — это трассировщик системных вызовов и сигналов. Для работы с файлами используется системный вызов «open», и соответственно, необходимо отслеживать только его. Пример команды:
$ strace -xf -eopen -o /path/to/log /path/to/program
Здесь мы указываем отслеживать все дочерние процессы, заменять непечатаемые символы на шестнадцатеричное представление и сохранять лог вызовов в файл /path/to/log. Потом полученный лог можно обработать соответствующими инструментами. Далее будут приведены примеры, как можно вычленить из лога всю нужную информацию.
Мониторинг текстового редактора nano
Мониторинг видеопроигрывателя mplayer
Теперь попробуем запустить mplayer и проверить те файлы, в которые он только пишет. Возможно, это нам даст возможность составить нужный безопасный профиль работы программы.
$ strace -xf -eopen -o out.log mplayer test.mp4
$ sed -n 's/.*open(\(.*\))\s*=.*/\1/p' out.log | grep -v O_RDONLY | sort
"/dev/3dfx", O_RDWR
"/dev/fb0", O_RDWR
"/dev/mga_vid", O_RDWR
"/dev/mga_vid", O_RDWR
"/dev/shm/pulse-shm-3056117003", O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, 0400
"/home/nuald/.mplayer/config", O_WRONLY|O_CREAT|O_EXCL, 0666
"/home/nuald/.pulse-cookie", O_RDWR|O_CREAT|O_NOCTTY, 0600
Здесь мы командой grep ограничили вывод, и не включали файлы, которые были открыты с флагом O_RDONLY (только на чтение). Как видите, и здесь не все так гладко — mplayer-у приходится писать в другие файлы, и возможно ограничение доступа полностью его сломает, и он не сможет воспроизводить видео. Так что приведенную выше идею об ограничении доступа не так просто будет реализовать, и точно не реализовать в ее изначальном смысле.
Заключение
В этом небольшом эскурсе была приведена лишь одна область применения strace. У данной программы есть много замечательных способностей, и она может позволить избавиться от бессонных ночей в поисках причин неработоспобности приложений даже без применения отладчика. Это инструмент, который должен знать любой Linux-разработчик, и надеюсь, что это принесет вам пользу в борьбе с многочисленными багами, и повысить качество разрабатываемого программного обеспечения.
Непонятные файлы на диске мы обнаруживаем двумя путями. Либо они явно видны в проводнике или файловом менеджере, либо к ним приводят поиски причины исчезновения свободного места на диске. Хорошо, если после удаления файлов, они больше не появляются. Но так бывает не всегда, и в этом случае приходится определять приложение, которое их создает.
Однажды на форум обратился человек, у которого какое-то приложение записывало в корень системного диска файлы, в имени которых содержится tmp _out.
Конечно, не исключено, что эта система заражена, и требуется тщательная проверка всевозможными антивирусными средствами. Но далеко не всегда проблема связана с вредоносным кодом, и тогда понадобится другой подход. Проще всего вычислить виновника появления таких файлов с помощью утилиты Process Monitor. Из видео за четыре минуты вы узнаете, как это сделать.
Отслеживание активности
При запуске утилита отслеживает несколько типов системной активности:
- реестр
- файловую систему
- сеть
- процессы и потоки
Поскольку мы ищем причину записи файлов на диск, нужно сосредоточиться на активности в файловой системе. Для этого на панели инструментов оставьте включенной только одну кнопку, отвечающую за активность на диске.
Кроме того, убедитесь, что утилита отслеживает активность. Если у вас перечеркнута кнопка, которая на рисунке обведена красным, нажмите CTRL+E.
На рисунке выше активность отслеживается, причем только в файловой системе.
Основной фильтр
Теперь нужно применить фильтр, чтобы исключить не относящуюся к делу активность. Нажмите сочетание клавиш CTRL+L, и вы увидите возможности фильтрации. В Process Monitor сразу активны некоторые фильтры, исключающие отслеживание деятельности самой программы, а также некоторых системных компонентов (файла подкачки, таблицы MFT и т.д.). Это сделано для того, чтобы исключить мониторинг стандартной активности системы. В большинстве случаев удалять эти фильтры не нужно, и достаточно просто добавить свой.
На рисунке выше показан фильтр, который будет отслеживать создание и изменение всех файлов, в путях к которым содержится tmp _out. Давайте разберем фильтр подробнее слева направо:
- Path. Путь в файловой системе. Также можно указывать разделы реестра, когда отслеживается активность в нем.
- contains. Условие, по которому определяется поиск ключевого слова. В переводе с английского это слово означает «содержит». В зависимости от задачи можно конкретизировать условие, выбрав вариант begins with (начинается с) или ends with (заканчивается на).
- tmp _out. Ключевое слово, которое в данном случае должно содержаться в пути. Имя файла и его расширение являются частью полного пути к файлу.
- Include. Включение заданного условия в список отслеживаемых.
Не забудьте нажать кнопку Add, чтобы добавить фильтр в список. Впрочем, если вы забудете, Process Monitor напомнит об этом, прежде чем закрыть окно фильтров.
В данном случае я использовал часть имени файла в качестве ключевого слова, поскольку все непонятные файлы содержат в имени tmp_out. Если файлы создаются с разными именами, но зато в определенной папке, используйте путь к этой папке в качестве ключевого слова.
Поскольку задано жесткое условие фильтрации файловой активности, в окне программы, скорее всего, теперь не будет отображаться никаких процессов. Но Process Monitor уже начал их отслеживать.
Проверить работу фильтра очень просто. Достаточно создать в текстовом редакторе файл с искомым именем или в наблюдаемой папке, и Process Monitor моментально отреагирует на это.
Дополнительные фильтры
Запись и открытие лога
Учтите, что при длительном отслеживании размер лога может измеряться гигабайтами. По умолчанию Process Monitor записывает лог в файл подкачки. Если у вас маленький системный раздел, имеет смысл сохранять лог в файл на другом разделе диска.
Для сохранения лога в файл нажмите сочетание клавиш CTRL+B и укажите имя и желаемое расположение файла.
Изменения вступают в силу после перезапуска захвата активности. Теперь можно смело оставить Process Monitor включенным на длительное время, не опасаясь за лимит дискового пространства.
Остановить отслеживание активности можно сочетанием клавиш CTRL+E.
Впоследствии вы всегда сможете загрузить в утилиту лог из сохраненного файла. Закройте Process Monitor и дважды щелкните файл лога с расширением PML. Содержимое лога отобразится в окне Process Explorer.
Человек, обратившийся на форум с проблемой, так и не вернулся сообщить, помог ли ему мой совет. Но он был с таким вопросом не первый и, наверняка, не последний. Если вопрос возникнет у вас, вы сможете ответить на него с помощью Process Monitor.
О видео
Если честно, создание такого видео занимает намного больше времени, чем написание статьи. Поэтому я в любом случае не готов заменять печатный текст видеоматериалами. Но мне кажется, что в данном случае видео интереснее и понятнее. А что вы думаете по этому поводу?
Видео длится около четырех минут, и я старался сделать его быстрым и емким. Ведь в реальности подготовка к поимке приложения занимает буквально одну минуту. Вас устраивает скорость изложения?
Более подробный рассказ о Process Monitor и другие примеры его практического использования вы можете посмотреть в видео моего коллеги Василия Гусева, если у вас есть свободные 40 минут :)
Вадим - владелец этого блога, и почти все записи здесь вышли из-под его пера. Подробности о блоге и авторе здесь. Поддержать автора вы можете тут.
Вас также может заинтересовать:
Подпишитесь на канал и читайте интересные записи чаще! Есть вопросы? Задайте их в чате.
комментариев 19
Вадим.
Может стоит упомянуть еще и Filemon он тоже позволит решить задачу.
sergm, не вижу смысла, т.к. Process Monitor объединяет функционал Regmon и Filemon. Эти две утилиты больше не распространяются автором.
Годится! Согласны? +4PS надо будет обновиться.
Ваша оценка: 0 Ваша оценка: 0sergm, понятно, что у каждого свой привычный набор утилит (и о моем я планирую рассказать в скором времени :) Но Process Monitor уже достаточно давно заменил две отдельные утилиты и расширил их функционал. Так что да, обновляться надо :)
Morpheus, я рад, что ты нашел мое видео полезным, ибо твое скептическое отношение к ним мне известно :) В этом и есть главное преимущество коротких видео. Статью мы часто читаем по диагонали, цепляясь глазом за якоря (заголовки, жирный шрифт, картинки, код). А видео удерживает внимание непрерывно, когда автору это удается, конечно :)
Ваша оценка: 0 Ваша оценка: +1Morpheus: Это может быть полезно, если сделано со вкусом. Тебе удаётся делать интересно. Спасибо! »
Ваша оценка: 0Morpheus: А почему нет ссылки «цитировать» для самого материала, как для комментов? »
Спасибо Вадим! Очень интересно, но я с таким не сталкивался пока.
Видео суперски, кратко и ясно, такое редкость. Но и описание с нормальным количеством скринов, даже лучше.
Спасибо за Ваш блог. Читаю с удовольствием :Beer:
А я Вадим сразу вам и написал- очень будет полезно если будут хоть коротелькие ролики!! Как писал выше- нажал на паузу и разобрался)..Да и мне как то зрительно более понятно(имхо).
Ваша оценка: 0 Ваша оценка: 0Хорошая статья и самое главное (я преподаватель информатики) с хорошими примерами.
Ваша оценка: 0Вадим понятно! но в любом случае будем надеяться хоть на редкие небольшие ролики:).
Ваша оценка: 0 Ваша оценка: 0 Ваша оценка: 0Yuri, диагностику нужно проводить в два этапа:
1. Выявление папок, в которых записываются файлы.
2. Определение приложения, записывающего их.
Для первого этапа используйте специализированные утилиты. См. номер 5 в списке 10 лучших бесплатных программ для быстрой диагностики Windows. В комментариях упоминались и другие программы этого типа.
Ваша оценка: 0Просто спасибо. Такой труд дорогого стоит.
Ваша оценка: 0Дмитрий, спасибо на добром слове.
Ваша оценка: 0Сергей Валерьевич
Ваша оценка: 0Разработчики из Windows Sysinternals выпустили новую версию утилиты Process Monitor 3.0, популярной утилиты для мониторинга системы. Этот полезный инструмент предоставит подробную и актуальную информацию об активности всех приложений, выполняемых на вашем ПК. В том числе пользователь сможет узнать, к каким файлам обращаются программы, с какими ключами реестра взаимодействуют, какие процессы запускаются от их лица и многое другое. Предлагаемая версия не может похвастаться большим количеством новых функций, однако некоторые предложенные изменения наверняка вызовут интерес у пользователей.
К примеру, с помощью предлагаемого инструмента пользователь сможет выявлять причины утечек системных ресурсов, происходящих в его отсутствие. Для решения указанной задачи запустите Process Monitor, выберите опцию «Capture Events» в меню «File» и изучите имена процессов в левой части экрана. На этой панели можно найти информацию о файлах, открываемых и закрываемых различными процессами, и узнать к каким ключам реестра обращается интересующая вас программа. Эта информация поможет обнаружить нежелательные программы, например приложения, работающие в фоновом режиме и удалить их с целью высвобождения ресурсов системы. Не менее полезной утилита окажется при решении проблем в работе компьютера. Допустим, вы пытаетесь запустить программу под названием app.exe, однако приложение неожиданно завершает свою работу сразу же после запуска. Благодаря Process Monitor вы сможете идентифицировать отсутствующие файлы или неправильно настроенные параметры приложения.
При запуске новой процедуры трассировки, пользователь нередко получает отчет внушительных размеров, содержащий сотни и тысячи строк. Размер отчета можно слегка сократит с помощью специальных фильтров, однако, даже после этого можно будет наблюдать некоторый переизбыток информации. Вниманию пользователей версии Process Monitor 3.0 предлагается поддержка закладок, предназначенных для выделения наиболее важных данных (опция «Toggle Bookmark» в контекстном меню). Новая функция может использоваться даже со старыми отчетами. Выбранные пользователем строки для лучшей видимости выделяются полужирным шрифтом. А переход между закладками осуществляется одним нажатием на кнопку. Благодаря этому нововведению, владелец компьютера сможет быстро и без лишних усилий обнаружить всю интересующую его информацию.
В версии Process Monitor 3.0 был усовершенствован механизм записи переменных окружения, в особенности в момент запуска процесса. Выберите приложение и выполните операцию «Process Start», после чего вы увидите папку, из которой запускается конкретная программа и полную копию его текущего окружения. Разработчики также сообщают, что выпущенная версия утилиты может похвастаться более тесной совместимостью с новой операционной системой Windows 8.
Н аверное, каждому из пользователей Windows хотя бы раз приходилось иметь дело с так называемыми неудаляемыми файлами и папками. Как правило, причиной невозможности удалить, переместить или хотя бы переименовать такой объект является использование его каким-то процессом, причём необязательно чтобы этот процесс был системным. Это может быть антивирус, архиватор или какой-нибудь редактор.
Обычно в окне с ошибкой прямо указывается, что за процесс препятствует дальнейшим действиям с объектом, но бывает и так, что вместо этого сообщается, что файл или папка открыты в другой программе. Это понятно, но вот в какой именно?
Так вот, определить её очень просто. Во всех популярных версиях Windows (начиная с 7) есть такая встроенная утилита как «Монитор ресурсов», предназначающаяся для контроля использования программных и аппаратных ресурсов. В её поле зрения попадают все процессы, в том числе и зависшие. Она то как раз и подскажет, что именно держит файл или папку.
Нажмите сочетание клавиш Win + R и выполните в открывшемся окошке команду resmon .
Откроется окно монитора ресурсов. Переключитесь в нём на вкладку «ЦП» и введите в поле «Поиск дескрипторов» название объекта, при удалении, перемещении или переименовании которого возникла ошибка. Результаты отобразятся тут же, чуть ниже. В нашем примере удалению папки «Всякая всячина» препятствовал архиватор WinRAR , но в самом окне с описанием ошибки об этом ничего не говорилось.
Вот так всё просто. Кстати, если удерживающий процесс не является критическим, его можно завершить прямо из окна монитора ресурсов.
После этого проблемный файл, папка или другой объект легко смогут быть удалены обычным способом.
Читайте также: