Как посчитать, сколько раз был открыт файл / каталог?

1038
mynameis

Я пытаюсь узнать, сколько раз файл был открыт (с момента запуска ОС). Я думаю сделать это через stat, но большинство флагов возвращают только разницу между ПОСЛЕДНИМ временем, когда оно было открыто.

1
Я не уверен, что эта информация на самом деле отслеживается большинством файловых систем. Возможно, вам придется посмотреть на использование инструментов для отслеживания определенных файлов и создания отчетов об их открытии. Я уверен, что они существуют, но я не являюсь пользователем Linux, я не знаю названия упомянутых инструментов. Crippledsmurf 9 лет назад 0

1 ответ на вопрос

2
glallen

В этом ответе объясняется, что необходимо сделать, но особенности того, как это зависит от вашего дистрибутива, ваших настроек и целей, и какие инструменты вы выбираете для анализа данных:

То, что вы ищете, это демон Auditd в Linux. Из справочной страницы audd (8) :

AuditD является компонентом пользовательского пространства системы аудита Linux. Он отвечает за запись записей аудита на диск. Просмотр журналов осуществляется с помощью утилит ausearch или aureport . Настройка правил аудита выполняется с помощью утилиты Auditctl . Во время запуска правила /etc/audit/audit.rulesчитаются audctl и загружаются в ядро. Альтернативно, существует также программа augenrules, которая читает правила, расположенные в /etc/audit/rules.d/них, и компилирует их в audit.rulesфайл. Сам демон аудита имеет некоторые параметры конфигурации, которые администратор может пожелать настроить. Они найдены в auditd.confфайле.

Аудит использует встроенные в ядро ​​функции для создания журналов при выполнении определенных системных вызовов в соответствии с вашими спецификациями. После настройки вы найдете журналы /var/log/auditили что-то подобное для вашего дистрибутива.

Чтобы проверить доступ к файлу, вы должны использовать что-то похожее на:

auditctl -w /path/to/interesting/files/ -p rwxa -k myfileaudits 

Где -wуказывает путь к файлам -pуказывает, что система будет проверять ¨R EADS ж обрядах, е х ecutions, и через ttribute или разрешения изменения. Наконец, -kопция позволяет вам указать произвольный ключ для использования при поиске этого правила с помощью ausearch .

Обратите внимание, что хотя audd работает с системными вызовами, -p rон не отслеживает функцию чтения, а скорее открывает, так что журналы не затопляются при каждом чтении, но запись создается каждый раз, когда файл открывается для чтения.

После включения аудита и установки журналов ausearch можно использовать для анализа этих журналов на предмет любого доступа к указанным файлам, а стандартные текстовые или статистические инструменты можно использовать для создания подсчетов. Они могут варьироваться от grepи wc -lдо подсчета записей журнала, или от некоторой комбинации сценариев и GNU-R или gnuplot для создания графиков и отчетов.


Другой альтернативой является использование SELinux . Хотя SELinux является инструментом для контроля доступа, который обычно регистрирует только отказы в доступе, его можно настроить для регистрации ВСЕГО доступа и предоставления аналогичной информации для auddd.


Редактировать: если запись доступа требуется с самого начала : например, во время установки ОС, во время загрузки до запуска audd или перед установкой audd, то требуются более крайние меры. initrd.imgМожет потребоваться создание пользовательского установщика или пользовательского загрузочного файла для загрузки необходимых средств трассировки на уровне отладчика или ядра. Эти инструменты трассировки могут включать dtrace, perf, SystemTap, ktap или аналогичные инструменты уровня отладчика для захвата доступа во время загрузки. Хорошим справочником является http://www.brendangregg.com/linuxperf.html, и примером такого типа анализа производительности системы, а не аудита, является загрузочная диаграмма .

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

+1 - это отличный ответ о настройке для этого. Вопрос заключается в том, чтобы получить эту информацию с момента появления ОС, что подразумевает обратную силу. Можете ли вы расширить свой ответ по адресу, возможно ли это? fixer1234 9 лет назад 0
@ fixer1234 Я бы сказал, что это зависит от того, как определяется «начало ОС». Если вы отслеживаете «производственный процесс», то перед установкой ОС в эксплуатацию должны быть выполнены установка, усиление, аудит и ведение журналов, базовые показатели и резервные копии. Поэтому, если вы не анализируете сам процесс установки, просто настройте аудит, прежде чем устанавливать что-либо еще. Если нет, и вы хотите отслеживать «вещи» уровня ОС, начинающиеся где-то между голым железом, первым чтением / записью установщика или «первой загрузкой», затем либо пользовательским initrd, либо настраиваемым установщиком с функциями уровня отладки в порядке. Добавление правок к этому эффекту. glallen 9 лет назад 0
Мое чтение по вопросу было на самом деле что-то другое. Я думал, что это спрашивает, есть ли способ узнать после факта. У вас уже есть система, созданная в прошлом. На данный момент вы хотите узнать историю использования файла. Есть ли история или параметр, связанный с каждым файлом, который является частью файловой системы, который указывает количество раз, когда любой произвольный файл был открыт. Похоже, вы говорите, что ответ - нет. Вы можете настроить это для отслеживания использования с этого момента. Если вам это нужно, вам нужно настроить его заранее. fixer1234 9 лет назад 1
Правильный. Это должно быть настроено. См. [Структура inode в ext4] (https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Table) ... в этой структуре нет записей для счетчиков доступа, только такие записи, как ` i_ * time` для различных времен взаимодействия: доступ, изменение inode, изменение данных и удаление. glallen 9 лет назад 0
Можно ли написать скрипт, который будет подсчитывать количество открытий файла или каталога, начиная сейчас? mynameis 9 лет назад 0

Похожие вопросы