The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

whomade - процесс, запоминающий какие программы создают файлы в отслеживаемых каталогах

23.08.2025 07:46

Для определения приложений, создающих расходующие дисковое пространство файлы в домашнем каталоге пользователя, подготовлен фоновый процесс whomade, отслеживающий появление новых файлов при помощи механизма fanotify. Проект написан на языке С++ и распространяется под лицензией GPLv3.

Данные хранятся в БД SQLite3, которая периодически очищается от неактуальной информации (например, сведений об удалённых файлах). Для реализации требуемой функциональности на данный момент whomade отслеживает через fanotify открытие фалов с последующим отсевом ненужных событий, а не непосредственно операции создания файлов. Для запуска необходимы права root (требуются для fanotify).

Пользователям среды рабочего стола MATE предоставляется расширение для файлового менеджера Caja, выводящее информацию о процессе, создавшем выбранный файл.



  1. Главная ссылка к новости (https://github.com/ANGulchenko...)
  2. OpenNews: Выпуск nomenus-rex 0.7.0, утилиты для массового переименования файлов
Автор новости: A.Stahl
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63761-whomade
Ключевые слова: whomade
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (29) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, User (??), 08:06, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так ведь в ntfs создатель и без помощи демонов известен.
     
     
  • 2.11, WE (?), 09:21, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А ты не путай корпоративные ПО с опенсорщеной.
     
  • 2.13, нах. (?), 09:23, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ну и кто мне понасоздавал вот это вот

    11/08/2025  14:05           335,149 481a175f-cf20-4ad2-8548-d0d4eaa1ca5e.tmp
    22/08/2025  22:36                 0 602a6864-4320-4e8c-a888-5c212a639d78.tmp
    11/08/2025  14:05           292,514 bd22900a-d2de-47a1-9700-5bd3e078d27e.tmp

    ?
    Можешь подсказать, а то их уже под три сотни там таких?

    Поделка, как я понимаю, запоминает процесс (и не один лишь ненужно-pid)

     

  • 1.3, Stanislavvv (?), 08:18, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Данные хранятся в БД SQLite3

    А расширенные атрибуты, значит, нафиг?

     
     
  • 2.7, A.Stahl (ok), 09:04, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Атрибуты чего? БД хранит лишь кортежи имя файла/имя процесса.
     
     
  • 3.8, Аноним (8), 09:12, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Атрибуты ФС. Это ясно из контекста, да и термин однозначный.
     
     
  • 4.17, A.Stahl (ok), 09:32, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Атрибуты ФС.

    И какое отношение этот демон может иметь к атрибутам ФС? Вырази свою мысль полнее, я тебя не понимаю.

     
     
  • 5.21, Аноним (8), 09:50, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> Атрибуты ФС.
    > И какое отношение этот демон может иметь к атрибутам ФС? Вырази свою
    > мысль полнее, я тебя не понимаю.

    Попробуй подумать. Ну вот записывается информация в базу данных, чтобы потом периодически её удалять, когда файл исчезнет. Хотя достаточно записать, кто создал, прямо в атрибуты файла (которые кривой файловый менеджер обнулит, но это уже не по адресу). Можно даже без доступа пользователя на изменение, типа метки selinux.

     
     
  • 6.25, A.Stahl (ok), 09:55, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    И на каких ФС это работает? Вот я действительно ничего про это не знаю. Кинь ссылкой где всё это разжёвано.
     
     
  • 7.30, Аноним (8), 10:08, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ммм на всех? Сложно сказать. https://en.wikipedia.org/wiki/Extended_file_attributes
     
     
  • 8.33, A.Stahl (ok), 10:12, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Забавно Я не сталкивался Гляну потом повнимательней Это может упростить мне ж... текст свёрнут, показать
     
     
  • 9.34, Аноним (8), 10:30, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    О да, меня вот расстраивает, что записанные в атрибуты хэши с информацией об ист... текст свёрнут, показать
     

  • 1.6, Аноним (6), 08:29, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Отличная замена ls -la, да ещё и с гуй. Всегда искал!
     
     
  • 2.9, Аноним (8), 09:14, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну это вряд ли.
     

  • 1.10, u235 (ok), 09:18, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Заглянул в CMakeLists.txt и собирать это как-то расхотелось.
     
  • 1.12, RM (ok), 09:22, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    название subj и заголовок статьи крайне неудачны, видно из комментов.
    народ просто не понимает (не удивительно), что отслеживается не пользователь, создавший файл, а процесс.
    whatcreated а не whomade было бы лучше, как вариант.
    ну и в заголовоке заменить "кто" на "программу"
     
     
  • 2.20, Аноним (-), 09:40, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > в заголовоке заменить "кто" на "программу"

    Или на "что". Этого будет достаточно, но я согласен очень полезно, потому что с толку сбивает.

     

  • 1.18, freehck (ok), 09:33, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    A.Stahl, ты конечно молодец, что почитал доки и сделал свою реализацию, но вообще-то, хоть мне и неловко сейчас тебе это говорить, однако такой процесс уже есть, и он называется auditd.

    Минуточку внимания:




    % apt-get install auditd
    % auditctl -w /srv/watcher -p wa -k file-creation
    % touch /srv/watcher/f1
    % ausearch -k file-creation
    time->Sat Aug 23 06:27:29 2025
    type=PROCTITLE msg=audit(1755930449.930:203): proctitle=746F756368006631
    type=PATH msg=audit(1755930449.930:203): item=1 name="f1" inode=106694349 dev=fc:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=CREATE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
    type=PATH msg=audit(1755930449.930:203): item=0 name="/srv/watcher" inode=106700802 dev=fc:00 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
    type=CWD msg=audit(1755930449.930:203): cwd="/srv/watcher"
    type=SYSCALL msg=audit(1755930449.930:203): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffef733c719 a2=941 a3=1b6 items=2 ppid=494441 pid=495433 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts12 ses=52246 comm="touch" exe="/usr/bin/touch" subj=unconfined key="file-creation"



     
     
  • 2.19, A.Stahl (ok), 09:39, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > такой процесс уже есть, и он называется auditd.

    Это хорошо, но теперь прикрути туда БД и какой-то механизм для настройки всего этого.

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

     
     
  • 3.22, freehck (ok), 09:50, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это хорошо, но теперь прикрути туда БД

    А зачем нужна БД, если всю необходимую информацию можно получить через ausearch.

    > механизм для настройки всего этого

    Так auditctl же.

     

  • 1.24, Аноним (24), 09:54, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >addDir(DirAction::ADD, DirType::MONITOR, "/home/astahl/.config");
    >addDir(DirAction::ADD, DirType::MONITOR, "/home/astahl/.cache");
    >addDir(DirAction::ADD, DirType::IGNORE,  "/home/astahl/.cache/mozilla");

    Зачем вы новость на опеннет написали, если программа сделана исключительно для вашего личного пользования. И выкиньте нахрен эту библиотеку для парсинга опций командной строки, она не поддерживается, малофункциональная и глючная. Есть гораздо лучшие альтернативы:

    1. https://github.com/CLIUtils/CLI11
    2. https://git.code.sf.net/p/tclap/code
    3. https://github.com/bfgroup/Lyra
    4. https://github.com/saveman/octargs

    И инлайнить либы в репозиторий - это очень некрасиво. Освойте CMake наконец.

     
     
  • 2.26, A.Stahl (ok), 10:01, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это обычные плейсхолдеры, чтобы пользователь сразу понял что туда вводить. Их можно менять. Их нужно менять.

    >эту библиотеку для парсинга опций командной строки

    Она работает. Никаких нареканий у меня нет. Чем твои варианты лучше?

    >инлайнить либы в репозиторий - это очень некрасиво.

    Для мелких некритичных либ -- самое оно.

     
     
  • 3.29, Аноним (24), 10:05, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это вам локальная модель так навайбкодила? Потому что ни один программист так не напишет в продакшн-коде.
     
  • 3.31, Аноним (24), 10:09, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Она работает. Никаких нареканий у меня нет. Чем твои варианты лучше?

    Вы забыли (или никогда не знали) пословицу всех технооптимистов/материалистов/редукционистов/программистов: "you are only as good as your tools". "Меня устраивает" - не оправдание, а дешёвая отмазка, не выдерживающая никакой критики. "Не хватает денег" - уже более сильное оправдание, но оно не очень применимо к библиотеке для парсинга командной строки.

     
  • 2.28, Аноним (8), 10:04, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Твоя правда. У меня есть похожая шляпа на питоне, но там код получше и функциональность побогаче (раз в 100). А вся работа по написанию заняла те же полчаса. Есть ещё индексатор для поиска: изначально идея была fuzzy search для похожих имён, но в конечном итоге достаточно перестановок и замен/удаления символов. Без индекса перебор часы, с индексом 10 секунд, меня устраивает.
     
     
  • 3.32, Аноним (24), 10:10, 23/08/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В индексе случаем не dafsa?
     

  • 1.27, Аноним (24), 10:01, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >query = std::format(R "SQL(INSERT INTO {0:}(dirname) SELECT '{1:}' WHERE NOT EXISTS(SELECT 1 FROM {0:}WHERE dirname = '{1:}')) SQL ", table_name, dir);

    У вас случайно нет знакомого Little Bobby Tables?

     
  • 1.35, Аноним (35), 10:36, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кругом тотальный контроль!  Literally 1984.
     
  • 1.36, SubGun (ok), 10:38, 23/08/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, сколько алтернативно одаренных потащат это на сервера, и предоставят рут-доступ?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру