Os links simbólicos, uma ferramenta útil no Linux, podem se tornar inválidos quando o alvo para o qual apontam desaparece. Este artigo explora como identificar, avaliar e, se necessário, remover esses links defeituosos do seu sistema.
Entendendo os Links Simbólicos
Links simbólicos, também conhecidos como “soft links” ou “symlinks”, funcionam como atalhos que redirecionam para arquivos ou diretórios. Visualmente, eles se assemelham a arquivos e diretórios normais em um gerenciador de arquivos ou terminal. O alvo de um link simbólico pode estar em qualquer parte da estrutura de diretórios do sistema.
Por exemplo, se você tiver um link simbólico chamado “meu-atalho” no seu diretório pessoal, que aponta para “documento.txt” localizado em outro lugar, qualquer ação que você realizar em “meu-atalho” será aplicada a “documento.txt”. Assim, se você usar comandos como `cat` ou `less` em “meu-atalho”, verá o conteúdo de “documento.txt”.
Um sistema Linux padrão contém muitos links simbólicos, mesmo que você não os crie. O sistema operacional os usa para gerenciamento interno, e os instaladores de aplicativos frequentemente os usam para direcionar para arquivos executáveis. Isso garante que as atualizações de software não quebrem os caminhos, pois o link simbólico continua apontando para a versão mais recente, contanto que o nome do arquivo permaneça o mesmo.
Podemos identificar alguns links simbólicos usando o comando `ls` no diretório raiz. Em um sistema Ubuntu 20.10, eles aparecem em azul claro.
Ao executar o comando:
ls /
Podemos obter uma visão mais detalhada com a opção `-l` (lista longa). O comando abaixo mostra as entradas “lib” e a entrada “bin”:
ls -l /lib* /bin

O caractere ‘l’ no início de cada linha indica que o item é um link simbólico. O texto após “->” revela o destino para o qual o link aponta, geralmente diretórios neste exemplo.
As permissões mostradas (leitura, escrita e execução) são padrões e não refletem as permissões reais do destino. As permissões do arquivo ou diretório de destino são as que realmente valem.
Links Simbólicos Quebrados: Um Problema Comum
Um link simbólico se torna quebrado quando o arquivo ou diretório para o qual ele aponta é removido ou movido. Isso pode acontecer após uma desinstalação de aplicativo mal-sucedida, remoção manual de arquivos ou outras situações.
Esses links defeituosos são como placas de rua apontando para um lugar que já não existe.
Para demonstrar isso, vamos criar um link simbólico chamado “olá” em nosso diretório atual que aponta para um programa chamado “htg” dentro de um diretório “bin”.
ls -l
Ao tentar executar o link “olá”, o programa “htg” será executado.
./hello
Podemos confirmar que isso está ocorrendo ao executar o programa diretamente:
../bin/htg
Agora vamos remover o programa alvo:
rm ../bin/htg
Agora, ao verificar o link simbólico, ele é exibido em vermelho, indicando que o Linux o detectou como quebrado. O Linux também informa o alvo original, facilitando a substituição ou reparo do link.
Ao tentar executar o link simbólico quebrado, o erro apontará para o nome do link, e não para o nome do programa alvo que não existe mais.
./hello

Localizando Links Simbólicos Quebrados
A ferramenta `find`, em suas versões modernas, simplifica a busca por links simbólicos quebrados com a opção `xtype`. Podemos usar o sinalizador `l` com `xtype` para procurar links. Ao usar `find` e `xtype` desta forma, sem outros sinalizadores, forçamos a ferramenta a retornar somente os links inválidos.
find . -xtype l

Ao executar esse comando no diretório pessoal, encontramos vários links simbólicos quebrados, incluindo o “olá” que propositadamente quebramos. A pesquisa é recursiva, abrangendo todos os subdiretórios. Alguns dos outros links simbólicos estão relacionados ao navegador Firefox e a snaps.
Para contar quantos links quebrados existem, podemos canalizar a saída para o comando `wc` com a opção `-l` (linhas).
find . -xtype l | wc -l

Neste caso, o resultado indica 24 links simbólicos quebrados.
Analisando e Removendo Links Simbólicos
Antes de remover todos os links, é importante revisar a saída do comando `find` e verificar se há uma razão válida para a existência de um link simbólico inválido.
Algumas vezes, o problema pode ser o link em si e não o arquivo de destino. O destino pode existir, mas o link foi criado de forma incorreta. Nesses casos, recriar o link é a solução.
Em outros casos, um link aparentemente quebrado pode ser usado intencionalmente, como um indicador de bloqueio ou estado. O Firefox usa esse recurso, e um dos links da lista representa esse caso. Como não usamos o Firefox na máquina de testes, esse link pode ser excluído.
Também é possível que o alvo de um link exista apenas temporariamente, o que é um comportamento esperado por alguns softwares.
Por outro lado, um link simbólico quebrado também pode indicar um problema na instalação de algum software. Nesses casos, é preferível corrigir o problema em vez de simplesmente excluir o link.
Após corrigir todos os links que você deseja manter, repita o comando para verificar se eles não aparecem mais na lista.
Por segurança, limite as remoções de links simbólicos a seus próprios diretórios. Use extrema cautela ao executar esses comandos como root ou em diretórios de sistema.
Removendo Links Simbólicos Quebrados
A opção `-exec` executa comandos nos resultados da pesquisa do `find`. Usaremos `rm` para excluir cada link simbólico quebrado. A string `{}` é substituída pelo nome de cada link descoberto por `find`.
O ponto e vírgula (`;`) encerra a lista de comandos que queremos que `-exec` execute. A barra invertida (`\`) serve para que o ponto e vírgula seja interpretado como parte do comando `find` e não pelo shell.
find . -xtype l -exec rm {} \;

Após executar o comando, não há indicação visual de que algo aconteceu. Para verificar se a remoção foi bem-sucedida, repetimos o comando para procurar os links inválidos.
find . -xtype l

A ausência de resultados indica que os links simbólicos quebrados foram removidos com sucesso.
Revisão é Essencial
Lembre-se sempre de revisar os links simbólicos antes de excluí-los. Ao fazer isso, você evita remover itens que podem ter uma função específica.
Por exemplo, poderíamos ter executado o comando no diretório `.snap`, removendo apenas os links relacionados a ele. O link do Firefox, por sua vez, permaneceria intacto.