Primeiro, você precisa determinar para o que precisa. Dizer "arquivos físicos" é muito geral. lsof fornecerá arquivos que foram abertos com um descritor de arquivo. ele fornecerá arquivos que foram abertos como arquivos mapeados na memória por threads. ele fornecerá arquivos de biblioteca que foram abertos por proceses. todos esses são arquivos físicos, mas a maneira como eles estão sendo usados é diferente.
Michael Martinez
Respostas:
37
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.
Agradável e simples. Se você precisar apenas da última coluna, poderá anexar | awk {'print $ 9'} Interessante. Também não recebo fifo na minha saída. Fedora 12 e CentOS 5.3
egorgry
O CentOS 5.2 e o Ubuntu 9.04 retornam o fifo para mim, pode ser uma mudança, mas você tem certeza de que existem fifos? Gostaria de cumprimentá-lo primeiro e ter certeza de que ele está lá, do que tentar o/
Kyle Brandt
Além disso, eu estava apenas falando, parece que ele simplesmente não quer o barulho, e provavelmente não haverá muitos quinos.
precisa saber é o seguinte
4
lsof / inclui apenas arquivos no sistema de arquivos raiz. Se você tiver vários sistemas de arquivos montados, eles não aparecerão na saída. Acho que a melhor maneira é usar o grep.
James
9
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 lsofpara todos os tipos que possam estar nessa coluna.
Pode haver um interruptor, mas a página de manual lê como tese de doutorado de alguém ... :)
Cawflands
11
Sim ... lsof homem é extremamente difícil de ler ...; p)
Vladislav Rastrusny
Marcar esse comentário com +1. :)
egorgry
em um servidor VPN com clientes suficientes, lsof não vai voltar, por isso greping não é uma opção para mim
Ohad Cohen
@OhadCohen lsof retornará se você restringir o que está procurando. Veja "FD" na página de manual (mem, cwd, pd, etc)
Michael Martinez
2
Foi o que fiz que funcionou perfeitamente para mim:
lsof -F n -p 12501| grep ^n/| cut -c2-| sort -u
A -F nopção para lsoffazê-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 -ueliminará 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:
/ dev
/ proc
/ sys
E pode haver outros, dependendo do seu sistema operacional.
Respostas:
Apenas olhei através de algumas páginas de manual, parece que você usa o comando:
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:
0-999 limita-o a arquivos com um número de descritor de arquivo.
fonte
/
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.fonte
Foi o que fiz que funcionou perfeitamente para mim:
A
-F n
opção paralsof
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. Ogrep ^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 caracteren
, deixando apenas o nome do arquivo. Finalmente, osort -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.
fonte