Sobes.tech
Middle

Como saber com quais ficheiros um programa está atualmente a trabalhar no Linux?

sobes.tech IA

Resposta da IA

Utilizando a ferramenta lsof (listar ficheiros abertos).

# Uso básico do lsof para listar todos os ficheiros abertos
lsof

Para obter uma lista de ficheiros abertos por um processo específico (por PID):

# Mostrar ficheiros abertos pelo processo com PID 1234
lsof -p 1234

Para obter uma lista de ficheiros abertos por um comando específico (por nome):

# Mostrar ficheiros abertos por todos os processos com o nome "nginx"
lsof -c nginx

Para obter uma lista de ficheiros abertos por um utilizador específico:

# Mostrar ficheiros abertos pelo utilizador "user1"
lsof -u user1

Flags adicionais do lsof:

Flag Descrição
-i Mostrar ligações de rede (Sockets)
-n Não converter endereços IP em nomes de hosts
-P Não converter portas em nomes de serviços
-r [N] Reiniciar o lsof a cada N segundos

Exemplo de uso para determinar qual processo usa um ficheiro específico:

# Que processo usa o ficheiro /var/log/syslog?
lsof /var/log/syslog

A saída do lsof inclui as seguintes colunas:

  • COMMAND: Nome do comando que iniciou o processo.
  • PID: Identificador do processo.
  • TID: Identificador do thread (se aplicável).
  • USER: Nome do utilizador que iniciou o processo.
  • FD: Descritor de ficheiro.
  • TYPE: Tipo de nó do ficheiro (DIR, REG, FIFO, CHR, BLK, SOCK, etc.).
  • DEVICE: Identificador do dispositivo.
  • SIZE/OFF: Tamanho do ficheiro ou deslocamento.
  • NODE: Número de inode.
  • NAME: Nome do ficheiro ou endereço de rede.