Digamos que eu configurei um link simbólico:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
existe uma maneira de ver qual é o destino myothertextfile.txt
usando a linha de comando?
Digamos que eu configurei um link simbólico:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
existe uma maneira de ver qual é o destino myothertextfile.txt
usando a linha de comando?
Use a -f
bandeira para imprimir a versão canônica. Por exemplo:
readlink -f /root/Public/myothertextfile.txt
De man readlink
:
-f, --canonicalize
canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist
readlink -f
.brew install coreutils
,. Isto instala versões GNU básicos de comandos pré-fixadas com a letrag
, ou sejagreadlink -f somefile
Ubuntu 18.04.1 LTS (Bionic Beaver)
páginas de manual do readlink, observe "Note realpath (1) é o comando preferido para usar na funcionalidade de canonização".readlink é o comando que você deseja. Você deve olhar a página do manual para o comando. Porque se você deseja seguir uma cadeia de links simbólicos para o arquivo real, precisará da opção -e ou -f:
fonte
Isso também funcionará:
mas
readlink
seria preferível para uso em um script, em vez de analisarls
.fonte
Se você quiser mostrar a fonte 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 do arquivo citado com desreferencia se link simbólico".fonte
A
readlink
é uma coisa boa, mas específico GNU e plataforma não cruz. Eu costumava escrever scripts de plataforma cruzada para/bin/sh
, portanto, usava algo como:ou:
mas isso precisa ser testado em plataformas diferentes. Eu acho que eles funcionarão, mas não tenham 100% de certeza para
ls
o formato de saída.O resultado de
ls
também pode ser analisado dentrobash
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):fonte
Se você não pode 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. Nós poderíamos usar
sed
para isso:fonte
A questão não é precisa o suficiente para dar uma resposta simples como a de brian-brazil:
realmente desreferirá todos os links simbólicos envolvidos na construção do caminho para o destino final por trás
some_path
.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 quero saber o que é:
o destino do link simbólico / usr / bin / emacs **, a resposta óbvia para mim é a seguinte
/etc/alternatives/emacs
:o destino final por trás dos links simbólicos em cascata / usr / bin / emacs, a resposta será a seguinte
/usr/bin/emacs24-x
:fonte
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 originalfonte
Se 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 maneira:Se você quer o alvo de um único, então
ls -l
deve funcionar:fonte