Удалить символическую ссылку в каталог
У меня есть символическая ссылка на важный каталог. Я хочу избавиться от этой символической ссылки, сохраняя при этом каталог.
Я попробовал 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
Он должен понять это, но поскольку мы не можем включить скрытый код, который был предназначен для другого случая, который больше не существует, но, случается, делает правильные вещи здесь.
Ответ 4
rm должен удалить символическую ссылку.
[email protected]:~$ mkdir bar
[email protected]:~$ ln -s bar foo
[email protected]:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
[email protected]:~$ rm foo
[email protected]:~$ ls -l foo
ls: cannot access foo: No such file or directory
[email protected]:~$ ls -l bar
total 0
[email protected]:~$
Ответ 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, ссылка будет удалена, и каталог будет в безопасности.