Удалить символическую ссылку в каталог

У меня есть символическая ссылка на важный каталог. Я хочу избавиться от этой символической ссылки, сохраняя при этом каталог.

Я попробовал rm и вернулся rm: cannot remove 'foo'.
Я попробовал rmdir и вернулся rmdir: failed to remove 'foo': Directory not empty
Затем я продвигался через rm -f, rm -rf и sudo rm -rf

Затем я пошел искать резервные копии.

Есть ли способ избавиться от символической ссылки, не выбрасывая ребенка с водой для ванн?

Ответ 1

# this works
rm foo
# versus
rm foo/

В принципе, вам нужно сообщить об этом, чтобы удалить файл, а не удалить каталог. Я считаю, что разница между rm и rmdir существует из-за различий в том, как библиотека C обрабатывает каждый.

Во всяком случае, первый должен работать, а второй должен жаловаться на foo, являющийся каталогом.

Если это не работает, как описано выше, проверьте свои разрешения. Для удаления файлов требуется разрешение на запись в содержащийся каталог.

Ответ 2

используйте команду "unlink" и убедитесь, что не имеет/в конце

$ unlink mySymLink

unlink() удаляет имя из файловой системы. Если это имя было последней ссылкой на файл, и никакие процессы не открывали файл, файл был удален, а пространство, которое оно использовало, было доступно для повторного использования.Если имя было последней ссылкой на файл, но у всех процессов все еще есть файл, файл останется в силе до тех пор, пока последний дескриптор файла, ссылающийся на него, не будет закрыт.

Я думаю, что это может быть проблематично, если я правильно его читаю.

Если имя ссылается на символическую ссылку, ссылка удаляется.

Если имя, указанное в сокете, fifo или устройстве, имя для него удалено, но процессы, у которых открыт объект, могут продолжать использовать его.

https://linux.die.net/man/2/unlink

Ответ 3

Предполагая, что это фактически символическая ссылка,

$ rm -d symlink

Он должен понять это, но поскольку мы не можем включить скрытый код, который был предназначен для другого случая, который больше не существует, но, случается, делает правильные вещи здесь.

Ответ 5

Используйте rm symlinkname, но не включайте косую черту в конце (не используйте: rm symlinkname/). Затем вас спросят, хотите ли вы удалить символическую ссылку, y, чтобы ответить "да".

Ответ 6

Если rm не может удалить символическую ссылку, возможно, вам нужно посмотреть разрешения на каталог, содержащий символическую ссылку. Чтобы удалить записи в каталоге, вам нужно написать разрешение на каталог, содержащий.

Ответ 7

Предполагая, что ваша настройка выглядит примерно так: ln -s /mnt/bar ~/foo, вы можете сделать rm foo без проблем. Если вы не можете, убедитесь, что вы являетесь владельцем foo и имеете разрешение на запись/выполнение файла. Удаление foo не коснется bar, если вы не сделаете это рекурсивно.

Ответ 8

В CentOS просто запустите rm linkname, и он попросит "удалить символическую ссылку?". Введите Y и Enter, ссылка будет удалена, и каталог будет в безопасности.