Créer un lien symbolique de répertoire dans Ubuntu [fermé]

247

Voici mon code pour créer un lien symbolique d'un répertoire:

sudo ln -s /usr/local/nginx/conf/ /etc/nginx

J'ai déjà créé le répertoire /etc/nginx. Je veux juste que le contenu du répertoire source ( /usr/local/nginx/conf/) soit dans le contenu du répertoire cible ( /etc/nginx). Mais lorsque j'exécute le code, /etc/nginxcontient un répertoire appelé conf, au lieu du contenu de conf. Ce répertoire contient le contenu que je veux, mais au mauvais endroit.

Pourquoi at-il mis un répertoire dans le dossier cible, au lieu de simplement mettre le contenu du répertoire dans le dossier cible?

nbro
la source
Vous pouvez également utiliser Fichiers (navigateur de fichiers par défaut). Faites un clic droit sur le dossier que vous souhaitez lier> option "Créer un lien". Il créera un dossier lié que vous pourrez déplacer et renommer selon vos besoins.
John Linhart
4
Utilisez la bind mountfonction Linux . exemple
gkiko

Réponses:

254

C'est le comportement de lnsi le deuxième argument est un répertoire. Il place un lien vers le premier argument à l' intérieur . Si vous voulez /etc/nginxêtre le lien symbolique, vous devez d'abord supprimer ce répertoire et exécuter cette même commande.

Erreur fatale
la source
10
Ce lien Unix.SE résout ici. Il semble que nous ayons une dépendance circulaire.
kaiser
30

C'est ce qui lnest documenté à faire lorsque la cible existe déjà et est un répertoire. Si vous voulez /etc/nginxd' être un lien symbolique plutôt que contenir un lien symbolique, vous feriez mieux de ne pas créer comme un premier répertoire!

Celada
la source
51
Votre réponse n'a de sens que dans le contexte où le lecteur connaît déjà la réponse. Il est inutile à quiconque poserait la question
Ricardo Saporta
1
Puis-je réellement créer un lien symbolique vers la racine d'un périphérique USB monté (donc je ne peux pas d'abord effacer ce dossier)?
Grigory Kornilov
1
@GrigoryKornilov vous pouvez créer un lien symbolique vers tout ce que vous voulez, y compris quelque chose qui n'existe pas. Cette question portait plutôt sur l'endroit où le lien symbolique est créé (pas sur l'endroit où il pointe). Un chemin d'accès particulier dans le système de fichiers est soit un fichier normal, soit un répertoire, soit un lien symbolique (ou c'est un socket, un tube ou un périphérique). Il ne peut pas y avoir plus d'une de ces choses en même temps (c'est-à-dire que vous ne pouvez pas avoir plus d'un fichier distinct avec exactement le même nom).
Celada
10

Dans le script est quelque chose d'utile comme ceci:

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi

il empêche avant de recréer le "mauvais" lien symbolique en boucle après la réexécution du script

kayn
la source
1
Excellent! Telle est la solution exacte. pas besoin de créer le répertoire s'il existe déjà. C'est un très bon réglage pour lier dur et le couler dans le trou noir (/ dev / null)
Cosmo Arun