Como rastrear o acesso a arquivos com o dtrace no solaris

3

Gostaria de saber como posso rastrear (mostrar) o acesso a arquivos no Solaris. Eu já encontrei o kit de ferramentas dtrace na esperança de que voptrace caiba na conta. Eu corri com voptrace -t /my/path se eu ls ou cat arquivos sob esse caminho não produz saída. Eu estou olhando para a ferramenta errada? Alguém pode sugerir outro para encontrar uma solução?

UPDATE
@bahamat

Ok, estava dando mensagens de erro como esta:

dtrace: error on enabled probe ID 3 (ID 126: syscall::openat:entry): invalid address (0xffd19652) in predicate at DIF offset 28

Depois de redirecionar o stderr, parece que ele realmente se aproxima do que eu quero.

    
por cstamas 16.09.2015 / 21:30

1 resposta

6

Brendan Gregg tem um bom número de dtrace 1 em seu site . Entre eles, este forro para assistir arquivos abertos por processo:

dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'

Expandindo isso, você pode assistir a um determinado arquivo sendo aberto, adicionando um predicado:

dtrace -n 'syscall::open*:entry /copyinstr(arg0)=="/etc/passwd"/ { printf("%s %s",execname,copyinstr(arg0)); }'

Gerando a seguinte saída:

CPU     ID                    FUNCTION:NAME
  2  12622                     open64:entry cat /etc/passwd

ls é um pouco diferente, em que ls file não abre file . Ele usa stat (especificamente, lstat64 ) para que o probe seja syscall::*stat*:entry .

Observe que as implementações de dtrace variam. Os comandos acima foram executados em illumos. YMMV.

    
por 16.09.2015 / 22:25