lsof - restringe a saída apenas para arquivos físicos - como?

29

Como eu digo ao lsof que eu preciso listar apenas arquivos físicos (não sockets, não conexões TCP / IP, apenas arquivos físicos)?

    
por Vladislav Rastrusny 26.01.2010 / 15:13

3 respostas

33

Apenas olhei através de algumas páginas de manual, parece que você usa o comando:

sudo lsof /

Isto listará todos os arquivos abertos no diretório /, que é tudo em um sistema de arquivos Linux. Apenas testado e mostra apenas REG e DIR.

Mais exemplos:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999 limita-o a arquivos com um número de descritor de arquivo.

    
por 26.01.2010 / 15:32
7

Pode haver um switch, mas se você não se importar em filtrá-lo através do grep, você pode fazer sudo lsof | egrep 'REG|DIR' , assumindo que "arquivos físicos" significa arquivos e diretórios comuns.

Veja a seção OUTPUT :: TYPE da página man man lsof para todos os tipos que podem estar nessa coluna.

    
por 26.01.2010 / 15:16
0

Foi o que fiz, que funcionou perfeitamente para mim:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

A opção -F n para lsof fará com que apenas imprima os nomes dos arquivos abertos. Cada linha de saída que tem o nome de um arquivo aberto será iniciada com o único caractere n seguido imediatamente pelo nome . Arquivos Regulares sempre serão o nome absoluto e completo do arquivo. O grep ^n/ selecionará apenas as linhas com um nome começando com / (significando um nome de arquivo completo e absoluto); eliminando assim coisas como portas abertas, sockets, pipe (como FIFOs), etc. O cut -c2- eliminará o primeiro caractere, o n , deixando apenas o nome do arquivo. Então, finalmente, o sort -u eliminará quaisquer entradas duplicadas.

Uma ressalva, isso incluirá arquivos que não são regulares , desde que seu nome comece com / . Por exemplo, todos os arquivos que começam com o seguinte seriam incluídos:

  • / dev
  • / proc
  • / sys

E pode haver outras pessoas dependendo do seu SO.

    
por 21.09.2018 / 00:10