Como determinar qual processo está criando um arquivo? [duplicado]

60

Dado o caminho do arquivo, como posso determinar qual processo o cria (e / ou lê / escreve para ele)?

    
por Anton Barkovsky 25.05.2011 / 19:09

5 respostas

74

O comando lsof (já mencionado em várias respostas) informa o processo um arquivo aberto no momento em que você o executa. lsof está disponível para praticamente todas as variantes do unix.

lsof /path/to/file

lsof não informa sobre arquivos que foram abertos há dois microssegundos e fechados há um microssegundo. Se você precisar assistir a um arquivo em particular e reagir quando for acessado, precisará de ferramentas diferentes.

Se você puder planejar um pouco com antecedência, poderá colocar o arquivo em um LoggedFS . LoggedFS é um FUSE sistema de arquivos empilhados que registra todos os acessos aos arquivos em uma hierarquia. Os parâmetros de registro são altamente configuráveis. O FUSE está disponível em todos os principais unices . Você desejará registrar os acessos no diretório onde o arquivo é criado. Comece com o arquivo de configuração de amostra fornecido e ajuste-o de acordo com este guia .

loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file

Muitos unices oferecem outros recursos de monitoramento. No Linux, você pode usar o relativamente novo subsistema de auditoria . Não há muita literatura sobre isso (mas mais do que sobre logsfs); você pode começar com este tutorial ou um poucos examples ou apenas com o auditctl man page . Aqui, deve ser o suficiente para garantir que o daemon seja iniciado e, em seguida, execute auditctl :

auditctl -w /path/to/file

(acho que sistemas mais antigos precisam de auditctl -a exit,always -w /path/to/file ) e assistem aos registros em /var/log/audit/audit.log .

    
por 25.05.2011 / 22:55
9

Bem, você pode executar lsof repetidamente e, se tiver sorte, o culpado manterá o arquivo aberto por tempo suficiente para que ele seja exibido. Ou seja:

$ lsof -r1 /path/to/file

ou para muitos arquivos

$ lsof -r1 /path/to/folder/*

Isso listará todo o acesso ao caminho fornecido em um determinado momento, uma vez por segundo. Isso inclui listar o PID do processo que acessa o arquivo.

Se isso não funcionar, ou seja, o arquivo é aberto e fechado muito rapidamente, o que geralmente é o caso, acredito que você precisa procurar por ferramentas mais elaboradas. Talvez o loggedfs possa ser alguma coisa?

Hackland
Se o lsof de uma vez por segundo não funcionar, você pode, é claro, hackear um loop while que execute lsof repetidamente o mais rápido possível. Como:

$ while true; do lsof /paht/to/file; done;

Não é bonito, mas quem sabe, pode fazê-lo.

    
por 25.05.2011 / 20:28
0
lsof |grep (filename)

Isso mostrará o processo que está usando o arquivo no momento.

    
por 25.05.2011 / 20:24
0

Você pode usar lsof para isso:

$ lsof /tmp/file
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
less      4737 wena    4r   REG    8,6    90700 1643536 /tmp/file

Ele diz que o processo chamado less é manter o arquivo " / tmp / file " aberto.

NOTA : Estranhamente, isso não funciona se eu usar geany ou nano . Estou ansioso para sugestões melhores.

    
por 25.05.2011 / 20:30
0

Você pode usar ls e grep para descobrir os arquivos usados pelo chrome

$ ls -l /proc/*/fd | grep "chrome"
lrwx------ 1 ba abc 64 Jul 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies
lr-x------ 1 abc abc 64 Jul 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx------ 1 abc abc 64 Jul 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx------ 1 abc abc 64 Jul 16 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx------ 1 abc abc 64 Jul 16 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x------ 1 abc abc 64 Jul 16 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

Outra maneira é usar lsof e grep

$ lsof | grep "chrome"
chrome     2204       abc  cwd       DIR                8,5     4096 1441794 /home/abc
chrome     2204       abc  rtd       DIR                8,5     4096       2 /
chrome     2204       abc  txt       REG                8,5 87345336 5111885 /opt/google/chrome/chrome
chrome     2204       abc  mem       REG                8,5  4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3
chrome     2204       abc  mem       REG                8,5  1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2
chrome     2204       abc  mem       REG                8,5   270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1
chrome     2204       abc  mem       REG                8,5    45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0
    
por 16.07.2014 / 21:36