Como digo a lsof que preciso listar apenas arquivos físicos (não soquetes, conexões TCP / IP, apenas arquivos físicos)?
Como digo a lsof que preciso listar apenas arquivos físicos (não soquetes, conexões TCP / IP, apenas arquivos físicos)?
Respostas:
Apenas olhei através de algumas páginas de manual, 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. 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.
/
Pode haver uma opção, mas se você não se importa de filtrá-la através do grep, pode fazê-lo sudo lsof | egrep 'REG|DIR'
, assumindo por "arquivos físicos" que você quer dizer arquivos e diretórios regulares.
Consulte a seção OUTPUT :: TYPE da página de manual man lsof
para todos os tipos que possam estar nessa coluna.
Foi o que fiz que funcionou perfeitamente para mim:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
A -F n
opção para lsof
fazê-lo imprimir apenas os nomes dos arquivos abertos. Cada linha de saída que tem o nome de um arquivo aberto começará com o único caractere n seguido imediatamente pelo nome . Os arquivos regulares sempre serão o nome completo e absoluto do arquivo. O grep ^n/
selecionará apenas as linhas com um nome começando com a /
(significando um nome de arquivo absoluto e totalmente qualificado); eliminando coisas como portas abertas, soquetes, tubulação (como FIFOs) etc. cut -c2-
Isso eliminará o primeiro caractere n
, deixando apenas o nome do arquivo. Finalmente, o sort -u
eliminará quaisquer entradas duplicadas.
Uma ressalva: isso incluirá arquivos que não são regulares , desde que o nome comece com a /
. Por exemplo, todos os arquivos iniciados com o seguinte seriam incluídos:
E pode haver outros, dependendo do seu sistema operacional.