Como encontrar e remover links simbólicos quebrados no Linux

Conteúdo

Uma janela de terminal em um laptop Linux.

Links simbólicos no Linux são um recurso fantástico, mas eles podem ser quebrados e deixados apontando para nada. A seguir, Explicamos como localizar links simbólicos quebrados, reveja e remova-os do seu sistema, se necessário.

Links simbólicos 101

Links simbólicos, também chamado “links suaves” e “links simbólicos”, eles são uma forma de atalhos que podem apontar para arquivos e diretórios. Um link simbólico se parece com um arquivo ou diretório normal em uma janela do gerenciador de arquivos. Também aparece como uma entrada em uma lista de arquivos em uma janela de terminal. O arquivo ou diretório para o qual o link simbólico aponta pode estar em qualquer lugar na árvore do sistema de arquivos.

Como um exemplo, Digamos que você tenha um link simbólico em seu diretório inicial chamado "dave-link" que aponta para um arquivo chamado "text-file.txt" localizado em algum outro lugar na árvore do sistema de arquivos.. Os comandos que você usa no link simbólico são automaticamente aplicados ao arquivo para o qual ele aponta. Se você tentar usar cat o less no link simbólico, você verá o conteúdo do arquivo “arquivo-texto.txt”.

Uma instalação padrão do Linux contém muitos links simbólicos. Mesmo que você mesmo não acredite neles, o sistema operacional os usa. As rotinas de instalação de aplicativos costumam usar links simbólicos para apontar para arquivos executáveis. Quando o software é atualizado, o arquivo binário é substituído pela nova versão e todos os links simbólicos continuam a funcionar como antes, contanto que o nome do novo arquivo seja o mesmo do antigo.

Podemos ver facilmente alguns links simbólicos usando ls no diretório raiz. Alguns dos ingressos são mostrados em uma cor diferente; em nossa máquina de teste Ubuntu 20.10, mostrado em azul claro.

Nós escrevemos o seguinte:

ls /

Podemos dar uma olhada mais profunda usando o -l (Lista longa) opção. Escrevemos o seguinte comando para ver todas as entradas “lib” e a única entrada “bin”:

ls -l / lib * / bin

No início de cada linha há um “eu”, que indica que o elemento é um link simbólico. O texto depois de “->”Mostra o que o link simbólico aponta para. Em nosso exemplo, os destinos são todos os diretórios.

As permissões são listadas como lidas, escritura e execução para o proprietário, o grupo e outros. Estas são entradas falsas padrão. Eles não refletem as permissões reais nos objetos apontados pelos links simbólicos. São as permissões no arquivo ou diretório de destino que têm prioridade e são respeitadas pelo sistema de arquivos.

Links simbólicos rotos

Um link simbólico está quebrado (ou é deixado pendurado) quando o arquivo para o qual ele aponta é excluído ou movido para outro local. Se a rotina de desinstalação de um aplicativo não funcionar corretamente ou for interrompida antes de ser concluída, você pode ficar com links simbólicos quebrados.

Se alguém excluir manualmente um arquivo sem saber que os links simbólicos apontam para ele, esses links simbólicos vão parar de funcionar. Eles serão como sinais de trânsito apontando para uma cidade que foi arrasada.

Podemos ver facilmente esse comportamento usando um link simbólico chamado “Olá” no diretório atual. Nós escrevemos o seguinte, usando ls para vê-lo:

ls -l

Aponte para um programa chamado “htg” em um diretório chamado “bin”. Se "executarmos" o link simbólico, execute o programa para nós:

./Olá

Agora podemos verificar se é isso que está acontecendo executando o programa diretamente:

../bin / htg

Como poderíamos esperar, nós recebemos a mesma resposta. Vamos deletar o arquivo do programa:

rm ../bin/htg

Agora, quando olhamos para o link simbólico, vemos que está em vermelho porque o Linux sabe que está quebrado. Também nos diz o que costumava ter como objetivo, para que possamos substituir o arquivo, recompilar o programa ou fazer o que for necessário para reparar o link simbólico.

Observe que se tentarmos executar o link simbólico, o erro que obtemos refere-se ao nome do link simbólico, em vez do nome do programa para o qual o link simbólico aponta.

Nós escrevemos o seguinte:

./Olá

Encontre links simbólicos quebrados

A maioria das versões modernas de find tenha o xtype opção (tipo estendido), o que simplifica a busca por links simbólicos quebrados. Nós vamos usar o l bandeira com xtype, para instruí-lo a pesquisar links. Usando find e xtype na próxima maneira, sem nenhum dos outros type banderas, forças xtype para retornar links quebrados:

achar . -xtipo l

Ao executar o comando em nosso diretório inicial de teste, existem alguns links simbólicos quebrados. Observe que a pesquisa é recursiva por padrão, então ele pesquisa todos os subdiretórios automaticamente.

O link simbólico “Olá” que quebramos de propósito aparece na lista, como esperávamos. Um dos outros links simbólicos está relacionado ao navegador Firefox, e o resto está relacionado a instantâneos.

Se canalizarmos a saída por meio de wc com ele -l (linhas), podemos contar as linhas, que é o mesmo que contar links simbólicos quebrados.

Nós escrevemos o seguinte:

achar . -xtipo l | wc -l

Somos informados de que temos 24 links simbólicos quebrados apontando para nada.

Olhe para, reveja e depois remova

Antes de se apressar e remover todos os links simbólicos quebrados, veja os resultados do find comando. Veja se há uma razão válida para algum dos links simbólicos quebrados.

As vezes, o link simbólico pode ser o problema, em vez do arquivo de destino. Se o link simbólico foi criado incorretamente, é possível que não vise nada, mas o verdadeiro objetivo está presente. Nesse caso, a resposta seria recriar o link simbólico.

Também é possível que um link simbólico aparentemente quebrado esteja sendo usado como outra coisa, como um indicador de bloqueio de arquivo ou outro indicador de movimento / não ir. Firefox faz isso; esse é o primeiro link simbólico da nossa lista. Apesar disto, Firefox não é usado em nossa máquina de teste, então é seguro para nós removê-lo.

Também é possível que o alvo esteja presente apenas periodicamente, e este é o comportamento esperado (e desejado) desse software particular. Talvez o arquivo de destino seja copiado de outra máquina ou da nuvem, executa sua função e é removido novamente, apenas para ser substituído por um programa diferente no próximo ciclo.

O link simbólico quebrado também pode ser um sintoma de uma falha na instalação do software.. Nesse caso, em vez de remover o link simbólico, você precisa consertá-lo manualmente ou repetir a instalação.

Depois de consertar os links quebrados, você precisa manter, repita o comando para pesquisar. Links simbólicos fixos devem estar ausentes dos resultados da pesquisa.

Por uma questão de segurança, é melhor limitar a remoção de links simbólicos para seus próprios diretórios. Tenha muito cuidado ao executar esses comandos como root ou em diretórios do sistema.

Excluir links simbólicos quebrados

a -exec Opção (corre) executar comandos no find Procurar Resultados. Vamos usar rm remover todos os links simbólicos quebrados. a {} A string é substituída pelo nome de cada link simbólico quebrado à medida que cada um é descoberto por find.

Temos que usar um ponto e vírgula (;) para terminar a lista de comandos que queremos -exec para correr. Usaremos uma barra invertida () para “fuga” ponto e vírgula, por isso é tratado como parte do find comando, em vez de algo Bash deve agir.

Nós escrevemos o seguinte:

achar . -xtype l -exec rm {} ;

Voltamos ao prompt de comando sem qualquer indicação de que algo aconteceu. Para verificar se os links quebrados foram removidos, repetimos o comando para procurá-los, na próxima maneira:

achar . -xtipo l

Sem resultados correspondentes, o que significa que links simbólicos quebrados foram removidos.

Lembre-se de verificar primeiro

Novamente, sempre reserve um tempo para revisar uma lista de links simbólicos antes de executar o comando para removê-los. Você pode evitar a remoção de qualquer um dos inseguros executando o comando para removê-los nos diretórios apropriados.

Como um exemplo, Acima, poderíamos ter executado o comando no diretório “.foto” e depois de remover manualmente o link simbólico solitário “Olá”. Isso teria deixado o link simbólico de bloqueio do Firefox intacto.

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ê.