Nesses casos, lsof
pode não ser a ferramenta mais prática. Eu usaria strace
neste caso. Por exemplo. para ver quais arquivos o comando ls
abre durante seu curto tempo de execução:
strace -e trace=open ls
Pode ser idiota, mas estou executando um comando que é concluído muito rápido, então não tenho tempo suficiente para extraí-lo de outra janela e ver quais arquivos estão abertos. Existe alguma maneira óbvia de executar um comando e anexar imediatamente o lsof a ele? (e de preferência continuar rastreando quais arquivos estão abrindo até que sejam concluídos)
edit - Eu também posso ser feliz com a anexação lsof ao processo depois que ele é desligado, eu não tenho que ver os arquivos que ele está abrindo em tempo real
Nesses casos, lsof
pode não ser a ferramenta mais prática. Eu usaria strace
neste caso. Por exemplo. para ver quais arquivos o comando ls
abre durante seu curto tempo de execução:
strace -e trace=open ls
Você pode usar o comando watch
em uma janela, por exemplo:
watch -d 'lsof| 'fgrep cron''
O comando atualiza a janela a cada dois segundos; você pode diminuir o tempo com a opção -n ver em mais detalhes em man watch
.
O | fgrep cron
pipe ajuda você a ver apenas o resultado que está procurando.
E quando você usa o comando na outra janela, você verá os arquivos e o usuário associados com o comando cron neste caso. Altere o comando cron pelo seu comando ou programa específico.
Você pode considerar o uso de 'strace': ele mostrará as chamadas do sistema desde o início da execução, incluindo as aberturas de arquivos.
Você pode monitorar todos os arquivos abertos em tempo real com o comando:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open
Para um nome de processo / comando em particular (não um script), você pode fazer: (por exemplo, exemplo como apache2)
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and proc.name=apache2
Tags lsof