Создать символическую ссылку на каталог в Ubuntu [закрыто]

247

Ниже приведен мой код для создания символической ссылки на каталог:

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

Я уже создал каталог /etc/nginx. Я просто хочу, чтобы содержимое исходного каталога ( /usr/local/nginx/conf/) находилось в содержимом целевого каталога ( /etc/nginx). Но когда я выполняю код, в нем /etc/nginxсодержится каталог с именем conf, а не содержимое conf. Этот каталог содержит содержимое, которое я хочу, но не в том месте.

Почему он поместил каталог в целевую папку, а не просто поместил содержимое каталога в целевую папку?

nbro
источник
Вы также можете использовать файлы (браузер файлов по умолчанию). Щелкните правой кнопкой мыши папку, на которую вы хотите создать ссылку> «Создать ссылку». Это создаст связанную папку, которую вы можете перемещать и переименовывать по мере необходимости.
Джон Линхарт,
4
Используйте bind mountфункцию Linux . пример
gkiko

Ответы:

254

Это поведение, lnесли второй аргумент является каталогом. Он помещает ссылку на первый аргумент внутри . Если вы хотите /etc/nginxбыть символической ссылкой, вы должны сначала удалить этот каталог и выполнить ту же команду.

Фатальная ошибка
источник
10
Эта ссылка Unix.SE разрешается здесь. Кажется, у нас есть круговая зависимость.
Кайзер
30

Это то, что lnзадокументировано, когда цель уже существует и является каталогом. Если вы хотите , /etc/nginxчтобы быть символической ссылки , а не содержать символьную ссылку, то вам лучше не создавать его как каталог первый!

Celada
источник
51
Ваш ответ имеет смысл только в том случае, если читатель уже знает ответ. Это бесполезно для любого, кто задаст вопрос
Рикардо Сапорта
1
Могу ли я на самом деле создать символическую ссылку на корень подключенного USB-устройства (поэтому я не могу сначала удалить эту папку)?
Григорий Корнилов
1
@GrigoryKornilov вы можете создать символическую ссылку на все, что вы хотите, в том числе то, что не существует. Этот вопрос был скорее о месте, где создается символическая ссылка (не там, где она указывает). Конкретный путь в файловой системе - это либо обычный файл, либо каталог, либо символическая ссылка (либо сокет, канал или устройство). Это не может быть больше, чем одна из этих вещей одновременно (т.е. вы не можете иметь более одного отдельного файла с одинаковым именем).
Селада
10

В скрипте полезно что-то вроде этого:

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

предотвращает повторное создание «плохой» зацикленной символической ссылки после повторного запуска скрипта

kayn
источник
1
Превосходно! Это точное решение. нет необходимости создавать каталог, если он уже существует. Это действительно хороший твик для жесткой связи и утопления в черной дыре (/ dev / null)
Cosmo Arun