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

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

Como posso dizer ao lsof que preciso listar apenas arquivos físicos (não soquetes, nem conexões TCP/IP, apenas arquivos físicos)?

Responder1

Acabei de dar uma olhada em algumas páginas de manual e parece que você usa o comando:

sudo lsof /

Isso listará todos os arquivos abertos no diretório /, que é tudo em um sistema de arquivos Linux. Acabei de testar 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 a arquivos com um número de descritor de arquivo.

Responder2

Pode haver uma opção, mas se você não se importa em filtrá-la através do grep, você pode fazer isso sudo lsof | egrep 'REG|DIR', assumindo que por "arquivos físicos" você quer dizer arquivos e diretórios regulares.

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

Responder3

Isto é o que eu fiz e funcionou perfeitamente para mim:

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

A -F nopção lsoffará com que ele imprima apenas onomesdos arquivos abertos. Cada linha de saída que possui o nome de um arquivo aberto começará com um único caracterenseguido imediatamente pelonome.Regularfiles sempre será o nome absoluto e totalmente qualificado do arquivo. O grep ^n/selecionará apenas as linhas com um nome começando com a /(ou seja, um nome de arquivo absoluto e totalmente qualificado); eliminando assim coisas como portas abertas, soquetes, tubos (como FIFOs), etc. Isso cut -c2-eliminará o primeiro caractere, o n, deixando apenas o nome do arquivo. Finalmente, eliminará sort -uquaisquer entradas duplicadas.

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

  • /dev
  • /proc
  • /sys

E pode haver outros dependendo do seu sistema operacional.

Responder4

Se você usá-lo lsof /, ele listará apenas os arquivos abertos em sistemas de arquivos montados DIRETAMENTE em / - ou seja, se você tiver /home montado em /, seu conteúdo será ignorado. Tentei várias combinações de opções para lsof, mas todas tiveram problemas. O melhor que consegui inventar é isto:

lsof `readlink -f /dev/block/*`

Isso usa readlink -f para obter todos os dispositivos de bloco e alimentá-los como uma lista para pesquisa. lsof ignora aqueles que não estão montados.

Se você tiver outras opções para limitar a pesquisa, por exemplo um pid, lembre-se de finalizar o comando lsof com um -ato AND com a lista de dispositivos de bloco:

lsof -p 982482 -a `readlink -f /dev/block/*`

informação relacionada