Quando ficamos sem espaço em disco, frequentemente procuramos no sistema de arquivos do nosso computador Linux por arquivos que não precisamos mais e os excluímos. Infelizmente, a exclusão de arquivos pode falhar se houver processos ativos que tenham referências a eles. Nessa situação, podemos interromper cada processo que mantém uma referência aberta antes de remover os arquivos.
No entanto, isso também pode ser problemático. Por exemplo, alguns programas não devem ser encerrados durante o horário de trabalho. Como solução, este artigo fornecerá um tutorial abrangente que abrange todos os passos necessários para ajudá-lo a localizar, remover e recuperar arquivos excluídos com o lsof.
Parte 1. O que é o comando lsof?
O comando lsof nos sistemas Unix e Linux significa "Listar arquivos abertos". É uma ferramenta poderosa para relatar informações sobre arquivos abertos por processos ativos em um sistema. O comando lsof fornece informações sobre arquivos abertos usados por processos, como soquetes de rede, arquivos regulares, diretórios, arquivos especiais de bloco e arquivos de caracteres especiais.
- A sintaxe do comando lsof é a seguinte:
lsof [options]
As opções utilizadas com o comando lsof determinam as informações que serão exibidas e o formato em que serão apresentadas.
O comando lsof tem várias opções e a tabela abaixo lista os argumentos mais usados.
Opção |
Descrição |
lsof | Lista todos os arquivos abertos |
-b | Oculta blocos do kernel |
/ [file system] / | Exibe arquivos abertos em um sistema de arquivos especificado |
/dev/tty* | Mostra os arquivos associados ao terminal |
-u [username] | Exibe arquivos abertos pertencentes a um usuário específico |
-u ^[username] | Exibe arquivos abertos pertencentes a todos os usuários, exceto um específico |
-c [process] | Lista todos os arquivos usados por um determinado processo |
-p [process ID] | Exibe todos os arquivos abertos vinculados a um ID de processo específico |
-p ^[process ID] | Mostra arquivos abertos usados por todos os outros IDs de processo |
-R | Lista IDs de processo pai |
+D [directory path] | Exibe todos os arquivos abertos em um diretório |
-i | Mostra todos os arquivos usados pelas conexões de rede |
-i [IP version number | Filtra arquivos com base em sua versão IP |
- i [udp ou tcp] | Filtra arquivos abertos com base no tipo de conexão (TCP ou UDP) |
-i :[port number] | Localiza processos em execução em uma porta especificada |
-i :[port range] | Localiza processos em execução em uma variedade de portas |
-t [file name] | Lista IDs de processo que acessaram um arquivo específico |
# kill -9 'lsof -t -u [user]' | Mata todos os processos pertencentes a um usuário |
-d mem | Exibe todos os arquivos mapeados na memória |
[path] | grep deleted | Mostra arquivos excluídos bloqueados |
man | Abre a página de manual |
Parte 2. Como encontrar e remover arquivos que estão abertos, mas foram excluídos com lsof?
Vamos primeiro compreender o conceito. Um arquivo Linux é um link para um inode, que contém todas as propriedades do arquivo e os blocos de dados no disco que compõem o conteúdo do arquivo. Quando você usa o comando rm para excluir um arquivo, você remove o link para seu inode, mas não o inode em si; outros processos ainda podem usá-lo. Somente depois que esses processos terminam e todos os links são removidos, o inode e os blocos de dados aos quais ele apontava ficam disponíveis para gravação.
Mesmo que o arquivo pareça desaparecer na lista de diretórios, os dados estarão em outro lugar se um processo ainda estiver aberto.
No sistema operacional Linux, o diretório /proc é utilizado como pseudo-sistema de arquivos de processos. Para cada processo em execução, é criado um diretório com o nome do processo dentro do diretório /proc. Esse diretório contém várias informações, incluindo um subdiretório "fd" (descritor de arquivos), que contém links para todos os arquivos que o processo tem aberto. Mesmo se um arquivo tiver sido excluído do sistema de arquivos, uma cópia dos dados ainda estará presente:
Passo 1. Para determinar para onde ir, obtenha o id do processo e o descritor de arquivo do processo que tem o arquivo aberto usando lsof. Depois de obter essas informações de lsof, copie os dados de /proc.
- Crie um arquivo de texto:
$ man lsof | col -b > myfile
Passo 2. Em seguida, examine o conteúdo do arquivo que você acabou de criar:
- O comando less deve exibir uma versão em texto simples da página de manual massiva de lsof.
$ less myfile
Passo 3. Para suspender o comando less, pressione Ctrl-Z.
- Verifique se o seu arquivo ainda está presente no prompt do shell:
$ ls -l myfile
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:14 myfile
$ stat myfile
Arquivo: `myfile'
Tamanho: 114383 Blocos: 232 Bloco IO: 4096 arquivo padrão
Dispositivo: 341h/833d Inode: 1276722 Links: 1
Acesso: (0644/-rw-r--r--) Uid: ( 1010/ jimbo) Gid: ( 1010/ jimbo)
Acesso: 2006-10-31 16:15:08.423715488 -0400
Modificação: 2006-10-31 16:14:52.684417746 -0400
Alteração: 2006-10-31 16:14:52.684417746 -0400
Passo 4. Por favor, remova ele.
- Desta vez não está mais presente.
$ rm myfile
$ ls -l myfile
ls: myfile: Nenhum arquivo ou diretório deste tipo
$ stat myfile
stat: não fo possível determinar `myfile': Nenhum arquivo ou diretório deste tipo
$
Neste ponto, você não deve autorizar o processo de continuar a usar o arquivo para sair, pois isso resultará na perda definitiva do arquivo.
Parte 3. Como recuperar arquivos excluídos usando lsof?
Depois de encontrar e remover arquivos abertos que foram excluídos, vamos recuperá-los agora com lsof. Se um arquivo foi excluído, mas ainda está aberto por um processo, o lsof pode exibir informações sobre o arquivo, incluindo seu descritor de arquivo, ID do processo e endereço completo.
Passo 1. Dê uma olhada no que o lsof tem a dizer sobre isso:
$ lsof | grep myfile
less 4158 jimbo 4r REG 3,65 114383 1276722 /home/jimbo/myfile (deleted)
A primeira coluna mostra o nome do comando associado ao processo, a segunda coluna contém o ID do processo e a quarta coluna contém o descritor do arquivo (o "r" indica que é um arquivo normal). Você sabe que o processo 4158 tem o arquivo aberto e o descritor de arquivo 4. Isso é tudo que você precisa saber para copiá-lo de /proc.
Passo 2. Como você está restaurando o arquivo, você pode pensar que usar o sinalizador -a com cp é a coisa certa a fazer - mas NÃO é uma boa coisa a fazer.
- Em vez de copiar os dados literais do arquivo, você copiará um link simbólico agora quebrado para o arquivo, conforme listado anteriormente em seu diretório original:
$ ls -l /proc/4158/fd/4
lr-x------ 1 jimbo jimbo 64 Oct 31 16:18 /proc/4158/fd/4 -> /home/jimbo/myfile (deleted)
$ cp -a /proc/4158/fd/4 myfile.wrong
$ ls -l myfile.wrong
lrwxr-xr-x 1 jimbo jimbo 24 Oct 31 16:22 myfile.wrong -> /home/jimbo/myfile (deleted)
$ file myfile.wrong
myfile.wrong: link simbólico quebrado para `/home/jimbo/myfile (deleted)'
$ file /proc/4158/fd/4
/proc/4158/fd/4: link simbólico quebrado para `/home/jimbo/myfile (deleted)'
- Então, em vez de tudo isso, um simples cp será suficiente:
$ cp /proc/4158/fd/4 myfile.saved
- Por último, verifique se você fez tudo corretamente:
$ ls -l myfile.saved
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:25 myfile.saved
$ man lsof | col -b > myfile.new
$ cmp myfile.saved myfile.new
Parte 4. Uma alternativa simples para o lsof para recuperar arquivos excluídos no Linux
Se você está procurando uma alternativa amigável ao lsof para recuperar arquivos excluídos, considere usar um software de recuperação de arquivos do Linux como o Wondershare Recoverit. Ao contrário do lsof, uma ferramenta de linha de comando, o Recoverit possui uma interface gráfica de usuário (GUI) simples que o torna fácil de usar, mesmo para pessoas com pouca ou nenhuma experiência técnica. Com o Recoverit, você pode verificar rapidamente o disco rígido do seu computador e recuperar arquivos excluídos com apenas alguns cliques.
Wondershare Recoverit - seu software de recuperação do Linux seguro e confiável
Mais de 5.481.435 de pessoas já baixaram.
Recupera documentos, fotos, vídeos, músicas, e-mails e outros mais de 1.000 tipos de arquivos perdidos ou excluídos de forma eficaz, segura e completa.
Compatível com todas as principais distribuições do Linux, incluindo Ubuntu, Linux Mint, Debian, Fedora, Solus, Opensuse, Manjaro, etc.
Auxilia em mais de 500 cenários de perda de dados, como exclusão, formatação de disco, travamento do sistema operacional, queda de energia, ataque de vírus, partição perdida e muito mais.
A interface simples permite recuperar dados de discos rígidos Linux com apenas alguns cliques.
Funciona através de uma conexão remota. Você pode recuperar dados perdidos mesmo quando seu dispositivo Linux travar.
Vamos te ensinar como usar o Wondershare Recoverit no Linux para recuperar dados que foram deletados. Se achar difícil acompanhar instruções por escrito, temos um vídeo tutorial mais detalhado para você assistir.
Para Windows XP/Vista/7/8/10/11
Para macOS X 10.10 - macOS 13
Passo 1. Recuperação do Recoverit Linux
Abra o software Wondershare Recoverit no seu dispositivo Linux. Em seguida, selecione as opções NAS e Linux no lado esquerdo da interface principal. Para continuar, selecione Recuperação do Linux.
Passo 2. Conexão remota do Linux
Na nova janela que aparece, preencha com as informações necessárias para estabelecer uma conexão remota. Quando terminar, pressione Conectar.
Enquanto você espera que a conexão seja estabelecida, o Recoverit iniciará uma busca automática por dados perdidos em um computador Linux.
Passo 3. Processo de recuperação
Dependendo da quantidade de dados que está sendo digitalizada, o procedimento de digitalização pode levar algum tempo; o status da digitalização será exibido na barra inferior. O melhor recurso do Recoverit é a capacidade de pausar a verificação sempre que um arquivo for restaurado.
Quando o processo de verificação estiver concluído, o Recoverit permite que você inspecione os arquivos para garantir que sejam aqueles que você deseja recuperar. Selecione Recuperar para salvar o arquivo em seu dispositivo Linux.
O software solicitará que você selecione um local para os arquivos recuperados em seu dispositivo. Certifique-se de ir para um local diferente de onde você perdeu seus arquivos anteriormente.
Para Windows XP/Vista/7/8/10/11
Para macOS X 10.10 - macOS 13
Conclusão:
Para concluir, o "lsof" é uma ferramenta útil do terminal para exibir informações sobre arquivos abertos por processos em sistemas Unix. No entanto, encontrar e recuperar arquivos que estão abertos, mas foram deletados é um processo complexo que requer um certo nível de conhecimento técnico. Nesses casos, um software de recuperação de arquivos como o Recoverit pode ser uma alternativa mais amigável ao usuário, fornecendo uma interface gráfica simples para digitalizar e recuperar rapidamente arquivos deletados.