Recherche du fichier d'origine d'un lien symbolique

20

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 file2dans /home/user/; mais c'est un lien symbolique vers un autre file1. Comment pourrais-je trouver file1sans avoir à parcourir manuellement chaque partition / répertoire pour trouver le fichier?

k-Rocker
la source
1
Veuillez développer le "fichier d'origine". Et si file1est un lien symbolique vers file0? Voulez-vous trouver la dernière cible de votre lien symbolique ( file0) ou juste la suivante ( file1)?
don_crissti

Réponses:

26

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
Gilles Quenot
la source
je n'obtiens aucune sortie
k-Rocker
Vous devriez en avoir un! Erreur ou chemin
Gilles Quenot
non rien: user@shell a5$ readlink -f ./student1.javaet je reçoisuser@shell a5$
k-Rocker
nvm, mon lien symbolique n'a pas été correctement configuré, je ne sais pas pourquoi. mais j'en ai fait un nouveau et ça marche, merci.
k-Rocker
2
FWIW readlink /path/filerenverra la prochaine cible.
don_crissti
2

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/»
Costas
la source
ok et bien j'essaye de faire un script, alors comment les utiliser? im nouveau pour linux.
k-Rocker
1
@ k-Rocker Si vous expliquez ce que vous avez l'intention de faire, ce serait mieux.
Costas
1

Manière la plus simple: cdoù se trouve le lien symbolique et faire ls -lpour lister les détails des fichiers.

La partie à droite ->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 le souligne @Gilles Quenot , vous pouvez aussireadlink -f /path/to/symbolic_link

Gabriel Staples
la source
0

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 backticks)

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
RWolfe
la source
0

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

Prateek Joshi
la source