Linux lsof Command

, Author

A ferramenta de comando “lsof” no Linux é uma das muitas ferramentas integradas que é super útil para verificar a “lista de arquivos abertos”. Sim, o termo “lsof” é a abreviação da tarefa.

Existem vários processos em execução no sistema o tempo todo, acessando diferentes arquivos do sistema. Estes arquivos podem ser arquivos de disco, scripts, soquetes de rede, dispositivos, pipes nomeados e outros. Usando “lsof”, é possível executar muitas coisas, como depuração. Também é bastante útil para os administradores do sistema descobrirem quais arquivos estão sendo acessados por quais processos. Um dos cenários mais úteis que encontrei é quando você está prestes a desmontar um sistema de arquivos, mas ele ainda está sendo acessado.

Sem mais delongas, vamos começar com “lsof”! Estou assumindo que seu sistema UNIX/Linux atual já tem “lsof” instalado.

que lsof

Este informa o caminho completo do comando, neste caso, “lsof”.

“lsof” versão
lsof -v

Esta relatará informações aprofundadas da versão “lsof”, incluindo a data de construção do binário, versão do compilador, bandeiras do compilador e outras.

Basic “lsof” usage

Executar “lsof” por si só.

>

lsof

Esta reporta uma GRANDE lista de todos os arquivos que estão sendo acessados pelo sistema no momento da execução do comando.

Embora todos os campos sejam auto-explicativos, a maioria fica confusa sobre as colunas “FD” e “TYPE” e seus valores. Vamos verificá-los.

FD: Abreviação de “File Descriptor”. Ele vem com os seguintes valores.

  • cwd: Diretório de trabalho atual
  • rtd: Diretório raiz
  • txt: Texto do programa (dados, código, e outros)
  • mem: Arquivo de memória mapeada
  • err: FD erro de informação
  • mmap: Memory-mapped device
  • ltx: Texto (dados e código)
  • m86 da biblioteca compartilhada: DOS Merge mapped file

Há também outros valores que você vai notar na coluna, como “1u” seguido por u, r, w, etc. valor. O que significam?

  • r: Leia acesso
  • w: Escreva acesso
  • u: Acesso de leitura e escrita
  • -: Modo desconhecido e contém um carácter de bloqueio
  • ‘ ‘: Modo desconhecido e não há carácter de bloqueio

TYPE: Descreve o tipo de ficheiro e a sua identificação. Os valores são os seguintes.

  • DIR: Directório
  • CHR: Ficheiro caractero-especial
  • REG: Ficheiro normal
  • FIFO: First in, first out

Arquivos abertos específicos do usuário

Linux é uma brilhante plataforma multi-usuário. Vários usuários podem acessar o sistema ao mesmo tempo e realizar operações para as quais eles têm permissão.

Para verificar os arquivos que estão sendo acessados por um determinado usuário, execute o seguinte comando.

lsof -u <username>

>

No entanto, para verificar os usuários com maior classificação, “lsof” precisará do privilégio de “super usuário”.

sudo lsof -u <username>

Como verificar todos os comandos e arquivos que um determinado usuário está acessando? Execute o seguinte.

lsof -i -u <username>

Again, para usuários com rank superior, “lsof” precisará do privilégio de “super usuário”.

sudo lsof -i -u < nome do usuário >

Processos em execução específicos do porto

Para descobrir todos os processos que estão atualmente usando uma determinada porta, chame “lsof” com a bandeira “-i” seguida da informação do protocolo e da porta.

lsof -i<46><protocolo><@hostname|host_address>
:<service|port>

Por exemplo, para verificar todos os programas que estão atualmente acessando a porta 80 sobre o protocolo TCP/IP, execute o seguinte comando.

lsof -i TCP:80

Este método também pode ser usado para mostrar todos os processos que estão usando portas dentro de um determinado intervalo, por exemplo, de 1 a 1000. A estrutura de comandos é similar à anterior com um pouco de magia na parte de número de portas.

lsof -i TCP:1-1000

Processos específicos do protocolo

Aqui estão 2 exemplos mostrando os processos que estão atualmente usando os protocolos IPv4 e IPv6.

lsof -i 4

lsof -i 6

Listar conexões de rede

O seguinte comando irá relatar todas as conexões de rede do sistema atual.

lsof -i

Excluindo com ^

Sim, podemos excluir usuário específico, porta, FD e outros usando o caracter “^”. Tudo que você tem que fazer é usá-lo com cuidado para que você não estrague toda a saída.

Neste exemplo, vamos excluir todos os processos do usuário “root”.

lsof -u^root

Existem outras formas de utilizar este mecanismo de exclusão com “lsof”, por exemplo, com as bandeiras como “-c”, “-d” etc. Nem todas as bandeiras suportam este mecanismo. É por isso que eu recomendo experimentar uma demonstração com este método com qualquer flag antes de implementá-lo em alguns scripts.

PID search

PID é uma propriedade importante de qualquer processo em execução no sistema. Ele permite uma identificação mais precisa de um determinado processo. O nome do processo não é muito útil em muitas situações, pois o mesmo binário pode criar cópias de si mesmo e executar diferentes tarefas em paralelo.

Se você não sabe como obter o PID de um processo, basta usar “ps” para listar todos os processos em execução e filtrar o output usando “grep” com o nome do processo e/ou comandos.

ps -A

Agora, execute a filtragem usando “grep”.

ps -A | grep <process_ou_command>

>

Agora, verifique quais arquivos o PID está acessando.

lsof -p <PID >

Listar ficheiros abertos para um dispositivo específico

A funcionalidade de “lsof” não está apenas limitada a estas funções. Você também pode filtrar o resultado do “lsof” por dispositivo também. Para este propósito, o comando será algo parecido com isto.

lsof <device_mount_point>

Este comando é super útil para descobrir todos os processos em execução com as informações de seu dono acessando um determinado sistema de arquivos. Se você está tendo problemas para desmontar um sistema de arquivos, esta é a melhor maneira de ir.

lsof <busy_device_mount_point>

Listar arquivos abertos sob um diretório

Simplesmente ao exemplo anterior, basta passar o caminho do diretório para “lsof” para descobrir se algum processo está acessando ele.

Nota: “lsof” irá verificar o directório recursivamente, por isso pode demorar algum tempo.

=lsof +D < caminho_diretório>

>

Bônus: terminar toda a atividade do usuário

Ser extremamente cauteloso com esta parte, pois ela pode simplesmente bagunçar com tudo o que um usuário está fazendo. O seguinte comando irá matar todos os processos em execução de um usuário.

sudo kill -9 `lsof -t -u <username`

Pensamentos finais

As características de “lsof” não param aqui. As mencionadas aqui são as que mais precisaremos no dia a dia. Existem muitas outras funcionalidades do “lsof” que podem ser úteis (em casos específicos, claro).

Para todas as funcionalidades disponíveis e sua utilização, verifique as páginas de homem e informações do “lsof”.

man lsof

info lsof

lsof -?

>

Desfrutar!

Deixe uma resposta

O seu endereço de email não será publicado.