Digamos que eu configure um link simbólico:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
existe uma maneira de ver qual myothertextfile.txt
é o destino usando a linha de comando?
Digamos que eu configure um link simbólico:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
existe uma maneira de ver qual myothertextfile.txt
é o destino usando a linha de comando?
Use a
-f
bandeira para imprimir a versão canonizada. Por exemplo:De
man readlink
:readlink é o comando que você deseja. Você deve olhar para a página man para o comando. Porque se você quiser seguir uma cadeia de links simbólicos para o arquivo real, precisará da opção -e ou -f:
Isso também funcionará:
mas
readlink
seria preferível para uso em um script em vez de análisels
.Se você quiser mostrar a origem e o destino do link, tente
stat -c%N files*
. Por exemploNão é bom para analisar (use
readlink
para isso), mas mostra o nome e o destino do link, sem a confusão dels -l
-c
pode ser escrito--format
e%N
significa “nome de arquivo entre aspas com desreferência se link simbólico”.Isso é uma coisa boa, mas específica do
readlink
GNU e não é multiplataforma. Eu costumava escrever scripts de plataforma cruzada para/bin/sh
, portanto, usaria algo como:ou:
mas estes precisam ser testados em diferentes plataformas. Eu acho que eles vão funcionar, mas não tenho 100% de certeza para
ls
o formato de saída.O resultado de
ls
também pode ser analisadobash
sem depender de um comando externo comoawk
,sed
ouperl
.Esta
bash_realpath
função resolve o destino final de um link (link→link→link→final):Se você não puder usar
readlink
, a análise do resultadols -l
pode ser feita assim.O resultado normal seria:
Então, queremos substituir tudo antes de " -> " e a seta incluída. Poderíamos usar
sed
para isso:A pergunta não é precisa o suficiente para dar uma resposta simples como a de brian-brasil:
de fato, desreferenciará todos os links simbólicos envolvidos na construção do caminho para o destino final por trás
some_path
de .Mas um nível de links simbólicos em cascata é apenas um caso particular entre outros em um sistema, sendo o caso geral N níveis de links simbólicos em cascata. Veja o seguinte no meu sistema:
rwhich
é minha própria implementação recursivawhich
que imprime todos os links simbólicos em cascata intermediários (para stderr) até o destino final (para stdout).Então se eu quiser saber o que é:
o destino do link simbólico /usr/bin/emacs**, a resposta óbvia para mim é
/etc/alternatives/emacs
retornada por:o destino final por trás dos links simbólicos em cascata /usr/bin/emacs, a resposta deve ser
/usr/bin/emacs24-x
retornada por:ll
ouls -l
deve listar os itens do diretório, incluindo seu link simbólico e seu destinocd -P /root/Public/myothertextfile.txt
(no seu caso) deve apontar para o caminho originalSe você encontrar o destino de todos os links em uma pasta e sua subpasta, use o
find . -type l -ls
comando com o tipo de link da seguinte forma:Se você deseja o destino de um único,
ls -l
deve funcionar: