web-dev-qa-db-fra.com

Recherche du fichier d'origine d'un lien symbolique

Disons donc que j'ai un lien symbolique d'un fichier dans mon répertoire personnel vers un autre fichier sur une partition différente. Comment trouver l'emplacement cible du fichier lié? Par cela, je veux dire, disons que j'ai file2 dans /home/user/; mais c'est un lien symbolique vers un autre file1. Comment pourrais-je trouver file1 sans avoir à parcourir manuellement chaque partition/répertoire pour trouver le fichier?

21
k-Rocker

Essaye ça :

readlink -f /path/file

(dernière cible de votre lien symbolique s'il y a plus d'un niveau)

Si vous voulez juste le prochain niveau de lien symbolique, utilisez:

readlink /path/file

Modifier 2020:

maintenant, GNU coreutils propre realpath:

realpath /path/file

semblable à readlink -f par défaut

31
Gilles Quenot

1.

ls -l bin

produire

lrwxrwxrwx 1 az az 14 Ноя 12 22:13 bin -> ../Gdrive/bin/

2.

file bin

produire

bin: symbolic link to `../Gdrive/bin/' 

3.

stat bin

produire

File: «bin» -> «../Gdrive/bin/»
4
Costas

Manière la plus simple: cd où se trouve le lien symbolique et faites ls -l pour répertorier les détails des fichiers.

La partie à droite de -> après le lien symbolique est la destination vers laquelle il pointe.

Ex:

lrwxrwxrwx 1 userName groupName 22 janvier 17 13:29 Lien vers temp.txt -> /home/user/temp.txt

Ici, nous avons "Lien vers temp.txt" qui pointe vers (->) "/home/user/temp.txt".

Mais, comme @ Gilles Quenot le souligne , vous pouvez aussi simplement faire readlink -f /path/to/symbolic_link

1
Gabriel Staples

Expansion sur Costas

Supposons que vous ayez

ln -s test.txt sym_link_1.txt
ls -l sym_link_1.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 16:59 sym_link_1.txt -> test.txt

Dans un script, vous pouvez le faire (utiliser des astuces)

ln -s `readlink sym_link_1.txt` sym_link_2.txt

Alors vous avez

ls -l sym_link_*.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 16:59 sym_link_1.txt -> test.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 17:01 sym_link_2.txt -> test.txt
0
RWolfe

Une autre méthode (à laquelle on n'a pas répondu précédemment) pour trouver des fichiers de liens consiste à utiliser la commande ci-dessous,

file -h <path_to_dir>/* | grep link

Commande:

file -h /home/prateek/* | grep link

Sortie:

/ home/prateek/Musique: lien symbolique vers/media/prateek/HD-E1/Musique

0
Prateek Joshi