Linux эквивалентно использованию fs в Mac OS X

есть ли Linux, эквивалентный команде Mac OS X fs_usage? Согласно на странице он делает следующее: "сообщать о системных вызовах и ошибках страниц, связанных с активностью файловой системы в режиме реального времени".

Я предполагаю, что один из вариантов будет использовать strace и фильтровать данные, однако команда fs_usage позволяет одновременно "отслеживать" все процессы, запущенные в системе.

вот пример вывода:

03:44:25  stat64            erences/ByHost/org.mozilla.firefox.69AC0B48-F675-5045-B873-A28B119C33E7.plist     0.000029   firefox     
03:44:25  stat64            /Users/**********/Library/Preferences                                             0.000011   firefox     
03:44:25  statfs64          /Users/**********/Library/Preferences                                             0.000004   firefox     
03:44:25  open              /Users/**********/Library/Preferences/org.mozilla.firefox.plist.lockfile          0.000090   firefox     
03:44:25  stat64            /Users/**********/Library/Preferences/org.mozilla.firefox.plist                   0.000004   firefox     
03:44:25  stat64            /Users/**********/Library/Preferences                                             0.000002   firefox     
03:44:25  open              /Users/**********/Library/Preferences/org.mozilla.firefox.plist.vjLkANe           0.000100   firefox   

любой идеи?

18
задан Cristian Ciupitu
26.03.2023 23:32 Количество просмотров материала 2752
Распечатать страницу

5 ответов

можно использовать auditctl для мониторинга системных вызовов, связанных с деятельностью файловой системы, как open,stat или lstat. К сожалению, мониторинг read или write представляется проблематичным.

auditctl - утилита для управления системой аудита ядра. Вам нужно быть root, чтобы использовать его. Он поддерживает различные фильтры, такие как:

devmajor    Device Major Number

devminor    Device Minor Number

dir         Full Path of Directory to watch. This will place a recursive
            watch on the directory and its whole subtree. It can only be
            used on exit list. See "-w".

egid        Effective Group ID. May be numeric or the groups name.

euid        Effective User ID. May be numeric or the user account name.

filetype    The target file's type. Can be either file, dir, socket, symlink,
            char, block, or fifo.

path        Full Path of File to watch. It can only be used  on exit list.

pid         Process ID

ppid        Parent's Process ID

пример (проверено на Fedora 16 x86_64 с)

добавление аудита правила, Запуск от имени root:

for syscall in open stat lstat read write; do
    auditctl -a exit,always -F arch=b64 -S $syscall \
             -F euid=1000 \
             -F dir=/tmp//q/linux-equivalent-to-mac-os-x-s-fs-usage-21675/"/tmp//q/linux-equivalent-to-mac-os-x-s-fs-usage-21675/" inode=178 dev=fd:03 mode=040775 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=CWD msg=audit(1339621352.871:18529):  cwd="/home/ciupicri"
type=SYSCALL msg=audit(1339621352.871:18529): arch=c000003e syscall=4 success=yes exit=0 a0=139bbf0 a1=7fff32d832d0 a2=7fff32d832d0 a3=24 items=1 ppid=2249 pid=3446 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="bash" exe="/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
[root@hermes ~]# ausearch --start 00:00:00 --uid-effective 1000
----
time->Thu Jun 14 00:02:32 2012
type=PATH msg=audit(1339621352.871:18529): item=0 name="/tmp//q/linux-equivalent-to-mac-os-x-s-fs-usage-21675/" inode=178 dev=fd:03 mode=040775 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=CWD msg=audit(1339621352.871:18529):  cwd="/home/ciupicri"
type=SYSCALL msg=audit(1339621352.871:18529): arch=c000003e syscall=4 success=yes exit=0 a0=139bbf0 a1=7fff32d832d0 a2=7fff32d832d0 a3=24 items=1 ppid=2249 pid=3446 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="bash" exe="/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
----
time->Thu Jun 14 00:02:47 2012
type=PATH msg=audit(1339621367.175:18531): item=0 name="bar" inode=218 dev=fd:03 mode=0100664 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=CWD msg=audit(1339621367.175:18531):  cwd="/tmp//q/linux-equivalent-to-mac-os-x-s-fs-usage-21675/"
type=SYSCALL msg=audit(1339621367.175:18531): arch=c000003e syscall=2 success=yes exit=3 a0=7fff5ed6b37f a1=0 a2=0 a3=7fff5ed69460 items=1 ppid=3446 pid=4735 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
----
time->Thu Jun 14 00:02:47 2012
type=PATH msg=audit(1339621367.172:18530): item=1 name="bar" inode=218 dev=fd:03 mode=0100664 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=PATH msg=audit(1339621367.172:18530): item=0 name="/tmp//q/linux-equivalent-to-mac-os-x-s-fs-usage-21675/" inode=178 dev=fd:03 mode=040775 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=CWD msg=audit(1339621367.172:18530):  cwd="/tmp//q/linux-equivalent-to-mac-os-x-s-fs-usage-21675/"
type=SYSCALL msg=audit(1339621367.172:18530): arch=c000003e syscall=2 success=yes exit=3 a0=1665500 a1=241 a2=1b6 a3=4 items=2 ppid=2249 pid=3446 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="bash" exe="/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
----
time->Thu Jun 14 00:02:47 2012
type=PATH msg=audit(1339621367.971:18532): item=0 name="bar" inode=218 dev=fd:03 mode=0100664 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=CWD msg=audit(1339621367.971:18532):  cwd="/tmp//q/linux-equivalent-to-mac-os-x-s-fs-usage-21675/"
type=SYSCALL msg=audit(1339621367.971:18532): arch=c000003e syscall=6 success=yes exit=0 a0=7fffdc713375 a1=7fffdc711580 a2=7fffdc711580 a3=7fffdc7112f0 items=1 ppid=3446 pid=4736 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts6 ses=1 comm="stat" exe="/usr/bin/stat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)

номера syscall можно найти в /usr/include/asm/unistd_64.h.

4
отвечен Cristian Ciupitu 2023-03-28 07:20

Да, да, я знаю... старая нить...

но все равно... Исходный код Apple для fs_usage доступен в интернете, его вполне можно скомпилировать самостоятельно. Конечно, есть некоторые оговорки...

Он основан на системных вызовах netbsd Apple OS X, так что некоторые (ха!) потребуется редактирование...

даже поставляется с бесплатным Makefile (NetBSD ароматизированный, увы).

но если вы позвоните в ближайшие 10 минут, они даже бросят в удобной справочная страница... все бесплатно!

Я слишком много смотрел ночные рекламные ролики.

исходный код fs_usage от Apple

(никакие возвраты, батареи не включены, не возвращаются в магазин, требуется некоторая сборка)

(и после просмотра кода и просмотра вашего примера я верю, что что-то может быть создано, чтобы сделать "подмножество" функций fs_usage довольно быстро... дай мне поработать...)

У меня работает программа, начинающая выглядеть похожей на то, что вы ищете, должна еще немного поработать над ней, чтобы стать ближе, но вы все можете попробовать.

Bitbucket Hg репозиторий-fs_usage

3
отвечен lornix 2023-03-28 09:37

iowatch возможно.


для просмотра активности в /etc нужно запустить

$ часы iWatch /и т. д.

особенности

  • командная строка и режим демона
  • файл конфигурации xml
  • возможность смотреть каталог рекурсивно и смотреть новые созданные каталоги
  • можно указать список исключений
  • смогите использовать regex для того чтобы сравнить имя файла/каталога
  • может выполнить команду, если событие происходит
  • отправить сообщение
  • syslog
  • время печати марки

событий

    access  : file was modified
    modify  : file was modified
    attrib  : file attributes changed
    close_write : file closed, after being opened in writeable mode
    close_nowrite   : file closed, after being opened in read-only mode
    close   : file closed, regardless of read/write mode
    open    : file was opened
    moved_from  : File was moved away from.
    moved_to    : File was moved to.
    move    : a file/dir within watched directory was moved
    create  : a file was created within watched director
    delete  : a file was deleted within watched directory
    delete_self : the watched file was deleted
    unmount : file system on which watched file exists was unmounted
    q_overflow  : Event queued overflowed
    ignored : File was ignored
    isdir   : event occurred against dir
    oneshot : only send event once
3
отвечен Jeremy W 2023-03-28 11:54

два ближайших варианта, которые я вижу (встроенный), будут iostat и inotify. iostat просто покажет статистику ввода / вывода для устройства или раздела в системе. его - это файловой системы, который вы можете подключить в сценарий, чтобы предупредить вас об изменениях в файлах. Вам нужно будет написать свой собственный код события, чтобы он прослушивал чтение/запись файла, а затем что делать с этим сигналом.

со страницы link/man:

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

лично я бы написал скрипт Python или bash для запуска inotify, когда мне нужно было отслеживать изменения, и отключать его, когда он не используется.

1
отвечен PenguinCoder 2023-03-28 14:11

установить sysstat и используйте команду

sar -B 1
0
отвечен Feczo 2023-03-28 16:28

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх