Como usar o comando lsof do Linux

Conteúdo

Indicador Shell no Linux

Se tudo no Linux for um arquivo, deve haver mais do que apenas arquivos em seu disco rígido. Este tutorial mostrará como usar lsof para ver todos os outros dispositivos e processos que são tratados como arquivos.

En Linux, tudo é um arquivo

A frase frequentemente citada de que tudo no Linux é um arquivo é verdadeira. Um arquivo é uma coleção de bytes. Quando eles lêem dentro de um programa ou enviado para uma impressora, eles parecem gerar um fluxo de bytes. Quando eles são escritos para, eles aceitar um fluxo de bytes.

Muitos outros componentes do sistema aceitam ou geram fluxos de bytes, como teclados, conexões de soquete, impressoras e processos de comunicação. Porque eles aceitam, gerar ou aceitar e gerar fluxos de bytes, esses dispositivos podem ser gerenciados, em um nível muito baixo, como se fossem arquivos.

Este conceito de design simplificou a implementação do sistema operacional Unix. Isso significava que um pequeno conjunto de controladores poderia ser criado, ferramentas e APIs para lidar com uma ampla gama de recursos diferentes.

Os dados e arquivos de programa que residem em seu disco rígido são arquivos antigos do sistema de arquivos. Podemos usar o ls comando para listá-los e saber alguns detalhes sobre eles.

Como descobrimos todos os outros processos e dispositivos que são tratados como se fossem arquivos? Nós usamos o lsof comando. Isso lista os arquivos abertos no sistema. Em outras palavras, lista tudo o que é tratado como se fosse um arquivo.

RELACIONADO: Que significa “tudo é um arquivo” en Linux?

O comando lsof

Muitos dos processos ou dispositivos que lsof podem relatar que pertencem ao root ou foram iniciados pelo root, então você precisará usar o sudo comando com lsof.

E porque essa lista será muito longa, vamos canalizá-lo less .

sudo lsof | menos

Antes de lsof O resultado aparece. Os usuários do GNOME podem ver uma mensagem de aviso na janela do terminal.

lsof: AVISO: não pode stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

lsof tente processar todos os sistemas de arquivos montados. Esta mensagem de aviso é gerada porque lsof encontrou um Sistema de arquivos virtuais GNOME (GVFS). Este é um caso especial de sistema de arquivos no espaço do usuário (FUSÍVEL). Ele atua como uma ponte entre o GNOME, suas APIs e o kernel. Ninguém, nem raiz, pode acessar um desses sistemas de arquivos, além do proprietário que o montou (para este caso, GNOMO). Você pode ignorar este aviso.

A saída de lsof é muito largo. As colunas da esquerda são:

As colunas à direita são:

As colunas de lsof

Nem todas as colunas se aplicam a todos os tipos de arquivos abertos. É normal que alguns deles estejam em branco.

  • Comando: O nome do comando associado ao procedimento que abriu o arquivo.
  • PID: Número de identificação do procedimento do procedimento que abriu o arquivo.
  • TEMPO: Número de identificação da tarefa (hilo). Uma coluna em branco significa que não é uma tarefa; é um procedimento.
  • Do utilizador: ID de usuário ou nome do usuário a quem pertence o procedimento, o o ID de usuário ou login da pessoa que possui o diretório em /proc Onde lsof encontre informações sobre o procedimento.
  • FD: Mostra o descritor de arquivo do arquivo. Os descritores de arquivo são descritos abaixo.
  • Escreve: tipo de nó associado ao arquivo. Os tipos de notas são descritos abaixo.
  • Dispositivo: Contém números de dispositivos, separados por vírgulas, para um personagem especial, bloco especial, regular, Diretório ou arquivo NFS, ou um endereço de referência de kernel que identifica o arquivo. Ele também pode exibir o endereço base ou o nome do dispositivo de um dispositivo de soquete Linux AX.25..
  • Tamanho / Desligado: Exibe o tamanho do arquivo ou deslocamento do arquivo em bytes.
  • : Exibe o número do nó de um arquivo local ou o número do inode de um arquivo NFS no host do servidor ou tipo de protocolo da Internet. Você pode exibir STR para um fluxo ou IRQ ou o número de inode de um dispositivo de soquete Linux AX.25.
  • Nome: Mostra o nome do ponto de montagem e o sistema de arquivos onde o arquivo reside.

Coluna FD

O descritor de arquivo na coluna FD pode ser uma de muitas opções; a página do manual liste todos eles.

A entrada da coluna FD pode consistir em três partes: um descritor de arquivo, um personagem de modo e um personagem de bloqueio. Alguns descritores de arquivo comuns são:

  • cwd: Diretório de trabalho atual.
  • errar: Erro de informação FD (veja a coluna NAME).
  • ltx: Texto da biblioteca compartilhada (código e dados).
  • m86: DOS Merge Mapped File.
  • mem: Arquivo de memória mapeada.
  • mmap: Dispositivo de mapa de memória.
  • pd: Diretório Parental.
  • rtd: Diretório raiz.
  • TXT: Texto do programa (código e dados)
  • Um número que representa um descritor de arquivo.

O caractere de modo pode ser um dos seguintes:

  • r: Acesso de leitura.
  • C: Acesso de escrita.
  • sua: Acesso de leitura e gravação.
  • ”: Um personagem espacial, se o modo for desconhecido e não houver caractere de bloqueio.
  • : Modo desconhecido e há um caractere de bloqueio.

O caractere de bloqueio pode ser um dos seguintes:

  • r: Ler o bloqueio em parte do arquivo.
  • R: Ler o bloqueio em todo o arquivo.
  • C: Gravar bloqueio em parte do arquivo.
  • C: Gravar bloqueio em arquivo inteiro.
  • sua: Ler e escrever bloqueio de qualquer comprimento.
  • você: Tipo de bloqueio desconhecido.
  • ”: Um personagem espacial. Não feche.

A coluna TYPE

existir mais de 70 ingressos que pode aparecer na coluna TYPE. Algumas entradas comuns que você verá são:

  • REG: Arquivo normal do sistema de arquivos.
  • PARA VOCÊ: diretório.
  • FIFO: Primeiro a chegar e primeiro a sair.
  • CHR: Arquivo especial de personagem.
  • BLK: Bloquear arquivo especial.
  • Internet: Tomada de Internet.
  • unix: Socket de dominio UNIX

Ver processos que abriram um arquivo

Para ver os processos que abriram um determinado arquivo, forneça o nome do arquivo como um parâmetro para lsof. Como um exemplo, para ver os processos que foram abertos kern.log Arquivo, use este comando:

sudo lsof /var/log/kern.log

lsof responde mostrando o procedimento único, rsyslogd que foi iniciado pelo usuário syslog.

Ver todos os arquivos abertos de um diretório

Para ver os arquivos que foram abertos a partir de um diretório e os processos que os abriram, passe o diretório para lsof como parâmetro. Você deve usar o +D opção (diretório).

Para ver todos os arquivos que estão abertos no /var/log/ diretório, use este comando:

sudo lsof + D / var / log /

lsof responde com uma lista de todos os arquivos abertos nesse diretório.

Para ver todos os arquivos que foram abertos desde o /home diretório, use o seguinte comando:

sudo lsof + D / home

Os arquivos foram abertos desde /home o diretório é mostrado. Observe que com descrições mais curtas em algumas das colunas, a lista completa é mais limitada.

Lista os arquivos abertos por um procedimento

Para ver os arquivos que foram abertos por um procedimento específico, usar el -c (comando) opção. Observe que você pode fornecer mais de uma definição de pesquisa para lsof agora mesmo.

sudo lsof -c ssh -c init

lsof fornece uma lista de arquivos que foram abertos por qualquer um dos processos fornecidos na linha de comando.

Ver arquivos abertos por um usuário

Para limitar a visualização a arquivos que foram abertos por um usuário específico, Use o -u opção (Nome do usuário). Neste exemplo, veremos arquivos que foram abertos por processos de propriedade de Maria ou iniciados em nome de Maria.

sudo lsof -u mary

Todos os arquivos listados foram abertos em nome da usuária Mary. Isso inclui arquivos que foram abertos pelo ambiente de área de trabalho., como um exemplo, ou simplesmente como resultado de Mary estar logada.

Excluir arquivos abertos por um usuário

Para excluir arquivos que um usuário abriu, Use o ^ operador. A exclusão de usuários da lista torna mais fácil encontrar as informações de seu interesse. Você deve usar o -u opção como antes, e adicione o ^ caractere no início do nome do usuário.

sudo lsof + D / home -u ^ mary

Desta vez, a lista de /home O diretório não inclui nenhum dos arquivos abertos pela usuária Mary.

Lista de arquivos abertos por um procedimento

Para listar os arquivos que foram abertos por meio de um procedimento específico, Use o -p (processo) e forneça o id do procedimento como parâmetro.

sudo lsof - p 4610

Todos os arquivos que foram abertos com o ID do procedimento que você forneceu são listados automaticamente.

Lista de IDs de procedimento que abriram um arquivo

Para visualizar os IDs de procedimento dos processos que abriram um arquivo específico, usar el -t (conciso) e forneça o nome do arquivo na linha de comando.

sudo lsof -t /usr/share/mime/mime.cache

Os IDs de procedimento são exibidos em uma lista simples.

Use pesquisas AND e OR

Vamos listar os arquivos que a usuária Mary abriu, que estão relacionados a processos SSH. Sabemos que podemos fornecer mais de um item de pesquisa na linha de comando, então deve ser fácil.

sudo lsof -u mary -c ssh

Agora vamos ver a saída de lsof. Isso não parece bom; existem entradas na saída que foram iniciadas pelo root.

Não era isso que esperávamos. O que aconteceu?

Quando você fornece vários termos de pesquisa lsof retornará qualquer arquivo que corresponda ao primeiro termo de pesquisa o o segundo termo de pesquisa, e assim por diante. Em outras palavras, realizar uma pesquisa OR.

Para fazer lsof realizar uma pesquisa AND, Use o -a (e) opção. Isso significa que os únicos arquivos a serem listados serão aqueles que correspondem ao primeiro termo de pesquisa, e o segundo termo de pesquisa, e assim por diante.

Vamos tentar de novo e usar o -a opção.

sudo lsof -u mary -c ssh -a

Agora, cada arquivo na lista é aquele que foi aberto por ou em nome de Maria, e está relacionado ao comando SSH.

Atualizar a tela automaticamente

Podemos usar o +|-r (repetir) opção de colocar lsof em modo de repetição. A opção de repetição pode ser aplicada de duas maneiras, qualquer +r o -r. Devemos também adicionar o número de segundos que queremos lsof espere antes de atualizar a tela.

Usar a opção de repetição em qualquer formato torna lsof exibir os resultados normalmente, mas adicione uma linha tracejada na parte inferior da tela. Aguarde o número de segundos fornecido na linha de comando e atualize a tela com um novo conjunto de resultados.

Com ele -r opção isso continuará até que você pressione Ctrl + C. Com ele +r formato, continuará até que não haja resultados para exibir, ou até que você pressione Ctrl + C.

sudo lsof -u mary -c ssh -a -r5

Observe a linha pontilhada na parte inferior da lista. Isso separa cada nova exibição de dados quando a saída é atualizada.

Visualização de arquivos associados a conexões de Internet

a -i Opção (Internet) permite que você visualize arquivos abertos por processos associados a conexões de rede e Internet.

lsof -i

Todos os arquivos abertos pela rede e conexões de Internet são exibidos.

Visualizando Arquivos Associados a Conexões de Internet por ID de Procedimento

Para visualizar arquivos abertos por conexões de Internet que estão associados a um ID de procedimento específico, Adicione o -p opção e -a opção.

Aqui, procuramos arquivos abertos por meio de uma conexão de Internet ou rede, por meio de um procedimento com um ID de 606.

sudo lsof -i -a -p 606

Todos os arquivos abertos são exibidos por ID de procedimento 606 que estão associados a conexões de rede ou internet.

Visualização de arquivos associados a conexões e comandos da Internet

Podemos usar o -c (comando) opção de pesquisar arquivos abertos por processos específicos. Para pesquisar arquivos que foram abertos na Internet ou em conexões de rede associadas ao ssh processo, use o seguinte comando:

lsof -i -a -c ssh

Todos os arquivos abertos devido a processos ssh são listados na saída.

Visualização de arquivos associados a portas e conexões de Internet

Podemos fazer lsof Relatar arquivos que foram abertos por meio de conexões de rede ou Internet em uma porta específica. Para fazer isso, nós usamos o : caractere seguido pelo número da porta.

Aqui estamos perguntando lsof para listar os arquivos que foram abertos na rede ou conexões de Internet através da porta 22.

lsof -i :22

Todos os arquivos listados foram abertos por processos associados à porta 22 (que é a porta padrão para conexões SSH).

Visualização de arquivos associados a conexões e protocolos de Internet

Nós podemos pergutar lsof para exibir arquivos que foram abertos por processos associados a conexões de rede e Internet, eles estão usando um protocolo específico. Podemos selecionar a partir de TCP, UDP e SMTP. Vamos usar o protocolo TCP e ver o que temos.

sudo lsof -i tcp

Os únicos arquivos listados são aqueles abertos por processos que usam o protocolo TCP.

Nós apenas arranhamos a superfície

Essa é uma boa base em alguns casos de uso comuns para lsof, Mas há muito mais do que isso. Quanto mais pode ser julgado pelo fato de que a página do manual tem mais do que 2.800 linhas.

a lsof O comando pode ser usado para se aprofundar cada vez mais nas camadas de arquivos abertos e pseudo-arquivos. Fornecemos um mapa esquemático; o atlas está em a página do manual.

setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.