Il était dangereux de spécifier un chemin relatif lors de la génération d'un lien symbolique

08/04 post-scriptum J'ai reçu des compléments et des corrections dans les commentaires, je vais donc apporter les corrections appropriées.

introduction

Quand j'apprenais les commandes shell, j'étais accro au marais des liens symboliques, je vais donc laisser un mémorandum. ~~ Je ne sais pas si c'est la meilleure pratique, mais utilisez autant que possible des chemins absolus pour générer des liens symboliques. ~~

Ce n'est pas une bonne pratique car cela dépend de l'occasion. En effet, si vous souhaitez gérer collectivement les fichiers et les liens de la source de lien, vous serez vulnérable à la modification de l'emplacement d'installation.

Qu'est-ce qu'un lien symbolique?

Le lien symbolique est l'une des fonctions du système de fichiers du système d'exploitation (OS), et c'est un mécanisme pour créer un autre fichier qui pointe vers un fichier ou un répertoire spécifique et se réfère au corps principal à travers lui. Glossaire informatique e-Words

Nous reconnaissons que les liens symboliques sous Linux sont comme des raccourcis sous Windows.

Le but est similaire, mais la réalité est assez différente. En outre, Windows a également des liens symboliques (en utilisant une fonctionnalité appelée points d'analyse). Les raccourcis ne sont que des lanceurs avec des informations pour ouvrir le fichier spécifié dans l'application, tandis que les liens symboliques sont des fichiers qui peuvent être utilisés comme alternative au fichier spécifié. @angel_p_57

Créer un lien symbolique

Les commandes utilisées pour créer un lien symbolique sont: hoge.jpg est un nom de fichier arbitraire, fuga est un nom de répertoire arbitraire. Ici, un lien symbolique pour un fichier appelé hoge.jpg est généré dans le répertoire fuga.


$ ln -s hoge.jpg fuga

Remarque: Dans ce cas, "si le répertoire fuga existe déjà", il fonctionnera comme prévu. Sans le répertoire fuga, un lien symbolique nommé fuga serait créé dans le même répertoire.

Si vous définissez $ ln -s hoge.jpg fuga /, ce sera une commande à exécuter si le répertoire existe. (J'ai fait référence aux commentaires que j'ai reçus)

Chose que tu veux faire

~ / Picture / konosuba.jpg lien symbolique, Je veux le générer dans ~ / Picture / foobar.

Ce que j'ai essayé

Lorsqu'il est spécifié comme chemin relatif (échec)

Supposons que le répertoire courant soit ~ / Picture.


~/Picture $ ln -s konosuba.jpg foobar

konosuba.jpg est généré dans le répertoire foobar, mais Tout d'abord, c'est une erreur.

Le lien symbolique de konosuba.jpg qui existe dans le répertoire courant n'est pas généré dans le dossier foobar spécifié comme chemin relatif ... **. ** **

Le lien symbolique konosuba.jpg généré dans le répertoire foobar est Chemin relatif de votre propre point de vue konosuba.jpg En d'autres termes, pensez à vous référer à konosuba.jpg dans le même répertoire.

En d'autres termes, il crée un fichier mystérieux appelé lien symbolique qui se réfère à lui-même.

(C'est parce que "konosuba.jpg ", qui est le premier argument de la commande shell, est lu comme un chemin relatif basé sur la position du lien symbolique lui-même.)

Lorsqu'il est spécifié comme chemin relatif (réussi)

Supposons que le répertoire courant soit ~ / Picture.


~/Picture $ ln -s ../konosuba1.jpg foobar

konosuba.jpg est généré dans le répertoire foobar. C'est la bonne réponse. Le lien symbolique konosuba.jpg généré dans le répertoire foobar est Il est généré sous la forme d'un lien faisant référence à "../konosuba1.jpg " vu de sa propre position.

Ce n'est peut-être pas un problème si je m'y habitue, mais honnêtement, je me sentais confus.

Dans ce cas, utilisez l'option -r (--relative). La commande déterminera automatiquement la position relative. Avec ln -s hoge.jpg fuga /, le lien symbolique créé fuga / hoge.jpg provoque une référence circulaire et est inutile, mais avec ln -s -r hoge.jpg fuga /, fuga / hoge. Il créera un lien approprié appelé jpg-> ../hoge.jpg. @angel_p_57

Ecrire avec un chemin absolu


$ ln -s ~/Picture/konosuba.jpg ~/Picture/foobar

Avec un chemin absolu, le risque que le référent ne soit pas destiné peut être considérablement réduit. Si la structure des répertoires se complique, j'ai l'impression que ça va être ridicule, mais pour le moment, je ne devrais pas faire d'erreur ...

en conclusion

Je ne me sens pas capable de bien l'écrire, je vais donc faire quelques changements au besoin ...

Les références

Premiers pas avec la ligne de commande Linux Ubuntu Manuals

Recommended Posts

Il était dangereux de spécifier un chemin relatif lors de la génération d'un lien symbolique
Je suis resté bloqué en essayant de spécifier un chemin relatif avec relative_to () en python
Une histoire sur la façon de spécifier un chemin relatif en python.
Comment mettre un lien symbolique
Convertir une chaîne de chemin qui utilise un lien symbolique au milieu en un chemin absolu
Quand un amateur écoutait de la musique anti-phase, c'était déroutant et calme à visiter.
[Selenium] Comment spécifier le chemin relatif de chromedriver?
Quand j'ai essayé d'installer PIL et matplotlib dans un environnement virtualenv, j'en étais accro.
[Langage C] Close () Il est dangereux de réessayer en cas d'échec
Un mémorandum lors de l'acquisition automatique avec du sélénium
Une note à laquelle j'étais accro lors de l'émission d'un bip sous Linux
Une note à laquelle j'étais accro lors de la création d'une table avec SQL Alchemy
[Ln] Comment coller le lien symbolique du répertoire est compliqué