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.