Comando lsof – Listar Arquivos e Processos abertos no Linux

Comando lsof – Listar Arquivos e Processos abertos

lsof significa “listar arquivos abertos” (List Open Files), e é um comando usado para retornar uma listagem de todos os arquivos abertos e dos processos que os abriram.

Um arquivo aberto pode ser um arquivo de disco, diretório, biblioteca, pipes, dispositivos e  sockets de rede que tenham sido abertos por um processo qualquer.

Por exemplo, podemos usar esse comando quando tentamos desmontar um disco e não conseguimos, pois algum arquivo, que desconhecemos, está em uso ainda. Como resolver o problema? Podemos listar os arquivos abertos e identificar os processos que os estão usando, e então, finalizá-los.

Essa ferramenta está disponível nos sistemas Linux, FreeBSD, Solaris e Mac OS X, entre outros.

Sintaxe:

lsof [opções]

Opções comuns:

lsof <enter>
Lista todos os arquivos abertos por todos os processos.
+D diretório
 Procura todas as instâncias abertas do diretório listado e todos os arquivos e diretórios que ele contém
-i
Mostra uma lista de sockets de rede abertos
-i :n
Mostra as conexões abertas na porta n
-i [tcp|udp]
Mostra as conexões ativas usando TCP ou UDP
-u usuário
Mostra o que o usuário tem aberto
-p PID
Mostra os arquivos abertos pelo processo com PID especificado
-t
 Retorna apenas os identificadores do processos (somente PIDs)
-c comando
Mostra quais arquivos e conexões de rede um comando está usando

 

Informações comumente retornadas pelo lsof são:

  • COMMAND – Comando em execução
  • PID – Identificador do processo
  • USER – Usuário proprietário do processo
  • FD – File Descriptor (Descritor de Arquivos). Os mais comuns são:
    • cwd – Diretório atual
    • txt – Arquivo de texto
    • mem – Arquivo mapeado na memória
    • mmap – dispositivo mapeado na memória
    • NUMBER – É o próprio descritor de arquivos. O caractere que vem logo após o número representa o modo no qual o arquivo está aberto, odendo ser:  r para leitura, w para gravação e u para leitura e gravação.
  • TYPE – Tipo do arquivo. Os tipos mais comuns são:
    • REG – Arquivo regular
    • DIR – Diretório
    • FIFO – FIFO (First In First Out)
    • CHR – Arquivo especial de caracteres
  • DEVICE – Números do dispositivo, separados por vírgula
  • SIZE, SIZE/OFF, OFFSET – Tamanho do arquivo ou offset do arquivo em bytes
  • NODE – Número de inode no sistema de arquivos ou tipo de protocolo IP
  • NAME – Nome do ponto de montagem e sistema de arquivos no qual o arquivo reside, ou o nome de um disopsitivo especial de blocos ou caracteres, ou ainda os endereços IP de um arquivo de rede; há outras opções mais avançadas.

Consulte a página de manual lsof(8) para ver mais detalhes.

Exemplos:

1. Mostrar os processos ativos no diretório /acesso. Usamos o comando lsof sem opções, e filtramos o resultado com grep:
# lsof | grep  /acesso
Comando lsof no Linux com grep
Veja que temos um arquivo chamado planilhas aberto com o programa vi. O PID do processo é 2312, trata-se de um arquivo regular (REG) e o arquivo está aberto para eitura e gravação (3u).
 
2. Listar todas as conexões ativas que usem o protocolo UDP:
# lsof -i UDP
Comando lsof no Linux com UDP
 
3. Mostrar as conexões abertas na porta 931:
# lsof -i:931
Comando lsof no Linux - Mostrando conexões abertas em uma porta
 
4. Mostrar o que o usuário fabio possui aberto no sistema:
# lsof -u fabio
 
5. Mostrar quais arquivos e conexões de rede o comando ping usa após ser disparado por um usuário:
# lsof -c ping
Comando lsof com ping no Linux
 
6. Procura todas as instâncias abertas do diretório /root:
# lsof +D /root
Comando lsof com diretório root no Linux
 
7. Obter o tráfego IPv6 na máquina:
# lsof -i 6
Comando lsof - Tráfego IPv6 no Linux
 
8. Descobrir portas que estão aguardando conexões (LISTEN):
# lsof -i -s TCP:LISTEN
Comando lsof - Conexões TCP no Linux
Funciona usando o grep também, como em lsof -i | grep LISTEN
 
9. Mostrar os arquivos abertos por todos os usuários EXCETO o usuário fabio. para isso usaremos o caractere ^ (expressão regular):
# lsof -u ^fabio
 
10. Matar todos os processos pertencentes ao usuário fabio de uma só vez:
# kill -9 $(lsof -t -u fabio)
Matar processos com o comando lsof no Linux
 
Esse comando executa lsof com as opções -u (usuário) e -t (retorna apenas PIDs), e passa o resultado para o comando kill -9.
Há várias outras opções disponíveis para o comando lsof. Pesquise nas páginas de manual se quiser saber mais a respeito.
 
Sobre Fábio dos Reis (1325 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

2 Comentários em Comando lsof – Listar Arquivos e Processos abertos no Linux

  1. Jailson Ferreira da Silva // 12/09/2015 em 21:33 // Responder

    Excelente conteudo de TI

Escreva um comentário

Seu e-mail não será divulgado


*