Quais arquivos foram abertos durante um processo

0

Em um sistema Linux, eu gostaria de obter uma lista de todos os arquivos que estão sendo abertos (ler ou gravar) por um processo específico em sua vida. Sua vida pode ser de várias horas, do começo ao fim.

Eu não quero depurar o kernel.

Não me importo de usar um programa de simulação como o link

Eu tentei usar o lsof, mas não tenho certeza se todos os arquivos estão listados e que foram abertos.

    
por Zlatko 08.12.2011 / 16:29

3 respostas

1

Você pode usar strace :

strace -e open command

Exemplo:

$ strace -e open who
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
open("/etc/localtime", O_RDONLY)        = 3
cyrus    console      2011-12-08 15:34 (:0)
cyrus    :0           2011-12-08 15:34
    
por 08.12.2011 / 16:38
2

1 pedacinho de conselhos ... leia a man-page. especificamente, olhe o parâmetro "-p" para lsof.

    -p s     This option excludes or selects the listing of  files  for  the
             processes

o "s" é o ID do processo para o processo que você está falando. Você pode impedir isso de fazer um simples

ps ax |grep yourprocessname

e roubando esse primeiro número. então simplesmente faça um

lsof -p your-snagged-number

e voila. Todos os arquivos em uso por um processo.

e não, inclui apenas os arquivos que estão abertos no momento. strace pode ser uma opção melhor ... mas muito mais complexa.

    
por 08.12.2011 / 16:39
0

Você pode usar strace para a tarefa, se ela estiver instalada em seu sistema:

strace -o strace.log <Your command>

No arquivo de log resultante, você pode grep para "open (" para localizar quaisquer arquivos que foram abertos. Você também pode pesquisar outras coisas que possam interessá-lo, como leituras / gravações de arquivos, acesso à rede e outras atividades .

    
por 08.12.2011 / 16:38

Tags