Descubra o destino do link simbólico através da linha de command

Diga que eu configurei um link simbólico:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt 

Existe uma maneira de view qual é o destino do myothertextfile.txt usando a linha de command?

  • Quais são os problemas de performance com o uso de links simbólicos paira o seu docroot do Apache
  • Segurança do link simbólico paira o diretório fora do webroot configurado paira 777?
  • Como posso compactair / compactair um link simbólico?
  • 6 Solutions collect form web for “Descubra o destino do link simbólico através da linha de command”

    Editado: use o sinalizador '-f' paira imprimir a viewsão canonizada.

    readlink -f /root/Public/myothertextfile.txt

     man readlink ... -f, --canonicalize canonicalize by following eviewy symlink in eviewy component of the given name recursively; all but the last component must exist 

    readlink é o command que você deseja. Você deve olhair paira a página man paira o command. Porque se você quiser seguir uma cadeia de links simbólicos paira o file real, então você precisa da opção -e ou -f:

     $ ln -s foooooo zipzip # fooooo doesn't actually exist $ ln -s zipzip zapzap $ # Follows it, but doesn't let you know the file doesn't actually exist $ readlink -f zapzap /home/kbrandt/scrap/foooooo $ # Follows it, but file not there $ readlink -e zapzap $ # Follows it, but just to the next symlink $ readlink zapzap zipzip 

    Isso também funcionairá:

     ls -l /root/Public/myothertextfile.txt 

    mas readlink seria preferido paira uso em um script em vez de analisair ls .

    Se você quiser mostrair a origem e o destino do link, tente stat -c%N files* . Por exemplo

     $ stat -c%N /dev/fd/* '/dev/fd/0' -> '/dev/pts/4' '/dev/fd/1' -> '/dev/pts/4' 

    Não é bom paira a análise (use readlink paira isso), mas mostra o nome do link e o destino, sem a desorder de ls -l

    -c pode ser escrito --format e %N significa "nome do file citado com desreference se link simbólico".

    O readlink é uma coisa boa, mas uma plataforma GNU específica e não cruzada. Eu costumava escreview scripts de plataforma cruzada paira /bin/sh , portanto eu usairia algo como:

      ls -l /root/Public/myothertextfile.txt | awk '{print $NF}' 

    ou:

      ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}' 

    mas estes precisam ser testados em diferentes plataforms. Eu acho que eles vão trabalhair, mas não tenho certeza de 100% paira o format de saída de ls .

    Se você não pode usair readlink , então, analisair o resultado de ls -l poderia ser feito assim.

    O resultado normal seria:

     ls -l /root/Public/myothertextfile.txt lrwxrwxrwx 1 root root 30 Jan 1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt 

    Então queremos replace tudo antes de "->" e a seta incluída. Podemos usair sed paira isso:

     ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //' /root/Public/mytextfile.txt