Linux equivalente a fs_usage do Mac OS X

7

Existe um equivalente Linux ao comando fs_usage do Mac OS X? De acordo com a página de manual , ela faz o seguinte : "reporta chamadas do sistema e falhas de páginas relacionadas à atividade do sistema de arquivos em tempo real".

Suponho que uma opção seria usar strace e filtrar os dados, no entanto, o comando fs_usage permite que todos os processos em execução no sistema sejam "rastreados" ao mesmo tempo.

Veja um exemplo de saída:

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   

Alguma idéia?

    
por Khai 21.12.2011 / 03:05

5 respostas

4

Você pode usar o auditctl para monitorar as chamadas do sistema relacionadas à atividade do sistema de arquivos, como open , stat ou% código%. Infelizmente, o monitoramento de lstat ou read parece ser problemático.

write é um utilitário para auxiliar no controle do sistema de auditoria do kernel. Você precisará ser root para usá-lo. Suporta vários filtros como:

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

Exemplo (testado no Fedora 16 x86_64)

Para adicionar as regras de auditoria, execute como 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/superuser.com/questions/370070
done

Para excluí-los depois, substitua auditctl por -a :

for syscall in open stat lstat read write; do
    auditctl -d exit,always -F arch=b64 -S $syscall \
             -F euid=1000 \
             -F dir=/tmp/superuser.com/questions/370070
done

Depois de adicionar as regras, faça alguma coisa nesse diretório como usuário com o UID 1000:

cd  /tmp/superuser.com/questions/370070
echo foo > bar
cat bar
stat bar

-d retornará o seguinte (o log é 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/superuser.com/questions/370070" 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/superuser.com/questions/370070" 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/superuser.com/questions/370070"
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/superuser.com/questions/370070" 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/superuser.com/questions/370070"
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/superuser.com/questions/370070"
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)

Os números syscall podem ser encontrados em /var/log/audit/audit.log .

    
por 13.06.2012 / 23:08
3

Sim, sim, eu sei ... discussão antiga ...

Mas ainda assim ... O código-fonte da Apple para fs_usage está disponível online, é bem possível compilá-lo você mesmo. Claro, existem algumas ressalvas ...

Ele é baseado nas chamadas de sistema netbsd do Apple OS X, então seria necessária alguma edição (ha!) ...

Até mesmo vem com um Makefile (netbsd com sabor, infelizmente).

Mas se você ligar dentro dos próximos 10 minutos, eles vão jogar uma página man útil ... tudo de graça!

Eu tenho assistido muito sobre infomerciais tarde da noite.

código-fonte fs_usage da Apple

(Nenhum reembolso, baterias não incluídas, não retornam ao estoque, é necessário algum assembly)

(e depois de examinar o código e ver o seu exemplo, acredito que algo poderia ser criado para fazer um 'subconjunto' dos recursos do fs_usage muito rapidamente ... deixe-me mexer ...)

Eu tenho um programa de trabalho, começando a parecer semelhante ao que você está procurando, tenho que trabalhar um pouco mais para chegar mais perto, mas você é bem-vindo para experimentar.

Repositório Bitbucket Hg - fs_usage

    
por 11.06.2012 / 15:14
3

iowatch pode ser uma possibilidade.

para assistir a atividade em / etc que você executaria

$ iwatch /etc

Recursos

  • linha de comando e modo daemon
  • arquivo de configuração xml
  • capacidade de assistir a um diretório recursivamente e assistir a novos diretórios criados
  • pode especificar uma lista de exceções
  • pode usar o regex para comparar o nome do arquivo / diretório
  • pode executar um comando se ocorrer um evento
  • enviar e-mail
  • syslog
  • imprime carimbos de hora

Eventos disponíveis

    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
    
por 13.06.2012 / 20:48
1

As duas opções mais próximas que posso ver (internas) seriam iostat e inotify . O iostat mostrará apenas estatísticas de entrada / saída para um dispositivo ou partição no sistema. O inotify é um observador de arquivos do sistema, que você pode conectar com um script para alertá-lo sobre alterações de arquivos. Você teria que escrever seu próprio código de evento para informá-lo para ouvir leituras / gravações de arquivos e, em seguida, o que fazer com esse sinal.

Na página do link / man:

Inotify can be used to monitor individual files, or to monitor directories. When a directory is monitored, inotify will return events for the directory itself, and for files inside the directory.

Pessoalmente, eu escreveria um script Python ou bash para executar o inotify quando eu precisasse monitorar alterações, e desabilitá-lo quando não fosse possível.

    
por 11.06.2012 / 05:10
0

Instale o sysstat e use o comando

sar -B 1
    
por 08.03.2012 / 15:09