У мене є символічне посилання на важливий каталог. Я хочу позбутися цього символічного посилання, зберігши за ним каталог.
Я спробував rm
і отримав відповідь rm: cannot remove 'foo'
.
Я спробував rmdir
і отримав у відповідь rmdir: не вдалося видалити 'foo': Каталог не порожній
.
Потім я пройшов через rm -f
, rm -rf
і udo rm -rf
.
Потім я пішов шукати свої резервні копії.
Чи є спосіб позбутися symlink, не вихлюпнувши разом з водою дитину?
# this works
rm foo
# versus
rm foo/
По суті, вам потрібно вказати їй видалити файл, а не видалити каталог. Я вважаю, що різниця між rm
і rmdir
існує через відмінності у тому, як бібліотека C поводиться з ними.
У всякому разі, перший повинен працювати, в той час як другий повинен скаржитися на те, що foo є директорією.
Якщо це не працює так, як описано вище, перевірте свої права доступу. Для видалення файлів вам потрібен дозвіл на запис до каталогу, що містить файли.
використовуйте команду "unlink" і переконайтеся, що в кінці не повинно бути символу /
$ unlink mySymLink
unlink() видаляє ім'я з файлової системи. Якщо це ім'я було останнім посиланням на файл і жоден процес не відкрив цей файл, файл буде видалено, а місце, яке він використовував, стане доступним для повторного використання. Якщо це ім'я було останнім посиланням на файл, але жоден процес не відкрив цей файл, файл буде існувати доти, доки не буде закрито останній файловий дескриптор, що посилається на нього.
Я думаю, що це може бути проблематично, якщо я правильно читаю.
Якщо ім'я посилається на символічне посилання, то посилання видаляється..
Якщо ім'я посилається на сокет, fifo або пристрій, то ім'я для нього видаляється, але процеси, у яких цей об'єкт відкритий, можуть продовжувати його використовувати.
Якщо rm не може видалити символічне посилання, можливо, вам потрібно переглянути дозволи на каталог, який містить символічне посилання. Щоб видалити записи каталогу, потрібно мати права на запис у каталозі, що містить символічне посилання.