LINUX.ORG.RU

Удаление симлинков

 ,


0

3

Всегда во всех скриптах на баше удалял симлинки и всё было норм. Т.е удалялся только сам симлинк

rm -rf ~/some_symlink

Сейчас в шелле сделал

rm -rf ~/some_symlink

и удалилась директория, на которую ссылается ~/some_symlink. Почитал в интернетах, там симлинки удаляются с помощью unlink. Почему тогда из скриптов не удалялась сама директория, а только симлинк? А из шелла вот такое поведение

★★★

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

cocucka ★★★★☆
()

Наверняка ты в шелле сделал как-то по другому
Вот смотри, делал в шелле:
$ mkdir /tmp/test ; cd /tmp/test ; mkdir test1 ; ln -s test1 test2 ; ls -l ; rm -rf test2 ; ls -l ; cd /tmp ; rm -rf /tmp/test
итого 4
drwxrwxr-x 2 mike mike 4096 фев 3 00:03 test1
lrwxrwxrwx 1 mike mike 5 фев 3 00:03 test2 -> test1
итого 4
drwxrwxr-x 2 mike mike 4096 фев 3 00:03 test1

imul ★★★★★
()

Уверен, что сделал именно rm -rf ~/some_symlink, а не rm -rf ~/some_symlink/? Ну и да, отдельный вопрос нахрена здесь -r, если предполагалось удалить симлинк и ни о какой рекурсивности речи не шло?

Учи шелл, короче, и маны читай.

CrX ★★★★★
()
Ответ на: комментарий от altwazar

mkdir /tmp/test ; cd /tmp/test ; mkdir test1 ; ln -s test1 test2 ; ls -l ; rm -rf test2/ ; ls -l ; cd /tmp ; rm -rf /tmp/test
итого 4
drwxrwxr-x 2 mike mike 4096 фев 3 22:48 test1
lrwxrwxrwx 1 mike mike 5 фев 3 22:48 test2 -> test1
итого 4
drwxrwxr-x 2 mike mike 4096 фев 3 22:48 test1
lrwxrwxrwx 1 mike mike 5 фев 3 22:48 test2 -> test1

imul ★★★★★
()
Ответ на: комментарий от imul

mkdir /tmp/test ; cd /tmp/test ; mkdir test1 ; ln -s test1 test2 ; ls -l ; rm -rf test2/ ; ls -l ; cd /tmp ; rm -rf /tmp/test

rm -rf test2/ не удалит ни саму директорию, ни симлинк, но всё содержимое этой директории. Если не добавлять -r когда не надо, то проблем не будет ни в скриптах, ни в оболочке.

altwazar ★★★★
()

Один раз захотел на работающей системе сделать rm -rf / от рута, посмотреть че будет. Линуксы тогда часто переустанавливал, пробовал разные дистры. Запустил, и … Вспомнил что в /mnt винда то примонтирована. А там было всякое нужное. Вот такое бывает.

nionio35
()
Ответ на: комментарий от nionio35

Вспомнил что в /mnt винда то примонтирована. А там было всякое нужное. Вот такое бывает.

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

altwazar ★★★★
()
Ответ на: комментарий от altwazar

Зачем ты мне пытаешься объяснять то, что я итак знаю.
ТС утверждает, что у него стёрлась именно директория. Ты завёл песню про слеш в конце. Я всего-лишь тебе показал, что директорию добавлением слеша не удалить. Впрочем ты это тоже знаешь. Просто читать не умеешь.

imul ★★★★★
()
Последнее исправление: imul (всего исправлений: 1)
Ответ на: комментарий от altwazar

Мне почему-то кажется, что ситуацию он описал нормально — хотел удалить линк, а грохнул каталог. А ещё мне кажется, что грохал руками он именно каталог, а не симлинк. А здесь с применённой командой уже наврал.

imul ★★★★★
()

rm -rf удаляет все файлы и директории вместе с симлинком. НО в скриптах возможно использовалась команда unlink, которая удаляет только симлинк, а не целевую директорию. Поэтому вы удаляете только симлинк, а не директорию, на которую он указывает.

Попробуй сделать так:

$ ln -s /path/to/real_directory ~/some_symlink

$ ls -l ~/some_symlink
lrwxrwxrwx 1 user user 20 Sep 1 12:34 /home/user/some_symlink -> /path/to/real_directory

$ unlink ~/some_symlink

$ ls -l ~/some_symlink
ls: cannot access '/home/user/some_symlink': No such file or directory
Команда rm -rf удаляет симлинк и все файлы в директории, на которую он указывает:
$ ln -s /path/to/real_directory ~/some_symlink

$ ls -l ~/some_symlink
lrwxrwxrwx 1 user user 20 Sep 1 12:34 /home/user/some_symlink -> /path/to/real_directory

$ rm -rf ~/some_symlink

$ ls -l ~/some_symlink
ls: cannot access '/home/user/some_symlink': No such file or directory

$ ls -l /path/to/real_directory
ls: cannot access '/path/to/real_directory': No such file or directory

versetty777
()