Удаление символической ссылки на каталог

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

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

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

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

9 ответов


# this works
rm foo
# versus
rm foo/

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

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

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


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

$ unlink mySymLink

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

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

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

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

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


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]:~$ 

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


предполагая, что это действительно символическая ссылка,

$ rm -d symlink

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


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


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


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


У меня была эта проблема с MinGW (фактически Git Bash), работающим на сервере Windows. Ни одно из вышеперечисленных предложений не сработало. В конце концов a сделал копию каталога в случае, если затем удалил мягкую ссылку в Проводнике Windows, а затем удалил элемент в корзине. Он издавал звуки, как будто удалял файлы, но не делал этого. Сделайте резервную копию, хотя!