Como descobrir qual comando é executado por um symlink? [fechadas]

0

(Desculpe se o título não é descritivo o suficiente)

Em algum lugar do meu sistema (o problema é que eu não sei onde) Eu tenho um link simbólico para o qual é dada prioridade por bash , mas o link está quebrado e, portanto, não funciona.

Mais especificamente:

  • diretório atual: mysymlink
  • em algum lugar no caminho (instalado por um pacote): mysymlink

ao executar mysymlink do diretório atual, o (quebrado) link simbólico mysymlink em algum lugar no sistema de arquivos é chamado.

Estou tentando encontrar esse link simbólico, excluí-lo para que eu possa usar aquele no diretório atual.

Como posso encontrá-lo?

(EDIT) EXEMPLO DE CONCRETO :

comando -v testcafe

/usr/local/bin/testcafe

ls -l / usr / local / bin / testcafe

ls: cannot access /usr/local/bin/testcafe: No such file or directory

(Nota: eu removi o caminho de destino por engano)

Como remover esse link simbólico (em algum lugar do sistema)?

    
por dragonmnl 08.06.2017 / 15:26

3 respostas

2

Talvez você deva tentar (assumindo que ls não é com alias; se é substituí-lo por /bin/ls )

ls -l $(which mysymlink)

desde que which mysymlink forneça o caminho completo do comando mysymlink (isto é, expande usando $PATH variable )

Você precisa experimentar o comando fora do diretório que contém mysymlink .

BTW, parece que . está no seu $PATH . Você pode verificar com echo $PATH . E ter o diretório atual no seu $PATH pode ser um risco de segurança.

ls: cannot access /usr/local/bin/testcafe: No such file or directory

Em seguida, verifique com ls -dl /usr/ /usr/local/ /usr/local/bin/ quais desses diretórios não existem (talvez você tenha esquecido de montar algum sistema de arquivos, ou removeu por engano, como root, alguns desses diretórios). / p>

E, claro, também um ls -l /usr/local/bin/testcafe

(você deve tentar com /bin/ls em vez de ls porque eu acho que seu ls está com alias ou redefinido)

How to remove this symlink (somewhere in the system)?

Você precisa primeiro encontrá-lo. Use encontre (1) apropriadamente (provavelmente com -lname )

    
por 08.06.2017 / 15:33
4

command -v UTILITY mostrará o que o shell tentaria executar se você desse o comando UTILITY .

Como relata

/usr/local/bin/testcafe

mas depois

ls: cannot access /usr/local/bin/testcafe: No such file or directory

quando você tenta ls -l , isso me leva a acreditar que o local relatado do utilitário testcafe foi armazenado em cache pelo shell e desde que foi removido.

Para atualizar o cache do shell, use hash -r (este comando não gera nada). Isso liberará o cache e o shell fará uma pesquisa de caminho completo na próxima vez que você executar testcafe .

    
por 08.06.2017 / 15:31
2

Para encontrar links simbólicos quebrados em todos os diretórios no seu PATH , com bash :

IFS=: read -ra dirs <<<"$PATH"
find -L "${dirs[@]}" -type l -maxdepth 1

Adicione -delete a find para excluí-los.

    
por 08.06.2017 / 15:51

Tags