LINUX.ORG.RU
ФорумTalks

[нетехнический] почему можно удалить текущий каталог?


0

0

вот почему так нельзя:

# mkdir /tmp/mountpoint/
# mke2fs /dev/ram0
# mount -o loop /dev/ram0 /tmp/mountpoint/
# cd /tmp/mountpoint/
# umount /tmp/mountpoint/
umount: /tmp/mountpoint: device is busy.

а так можно?

# mkdir /tmp/mountpoint/
# cd /tmp/mountpoint/
# rmdir /tmp/mountpoint/
# pwd
/tmp/mountpoint

★★

Никогда ещё Капитан Очевидность не рисковал своей лысиной, выдирая из неё последние волоски.

Потому что device is busy

jungleace
()

Текущий каталог — файл, нет ничего необычного в удалении файла.
Если так хочется отмонтировать, то есть -l.

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

файл, нет ничего необычного в удалении файла.

примонтированное устройство - тоже файл, почему же нельзя его отмонитровать?

name_no ★★
() автор топика

При удалении файла, как-бы подразумевается, что информация тебе больше не нужна.

При отмонтировании каталога - информация тебе всетаки нужна, а изза того, что каталог у тебя открыт - система считает, что он используется - ну логично же.

а если отмонтировать в момент записи - то, есть вероятность потери данных.


поэтому и нельзя. но как сказали выше - если очень хочется, то можно

Effect
()

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

Legioner ★★★★★
()

Ну там же написано device is busy, что значит на каком-то сраном языке устройство занято. Понимаешь?

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

>rm это не удаление файла, а удаление имени файла. Пока хоть одна программа держит этот файл, с диска он не удаляется. А отмонтирование требует того, чтобы файл никто не использовал.

Вот-вот. Это всеравно что сносить уличный сортир когда человек в нем какает.

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

Чтобы /proc/$$/cwd (относительно того самого bash) не ссылался в астрал.

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

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

что значит на каком-то сраном языке устройство занято. Понимаешь?

не держи меня за тупого - я понимаю, что там написано. я не понимаю в чём такая огромная принципиальная разница между удалением каталога и отмонтированием от этого каталога файловой системы: на мой взгляд это вещи равнозначные.

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

>если его удалить - будет ссылаться как раз в астрал, разве нет?
В неймспейсе данного шелла — ни разу. На деле каталог удалится только после того, как все процессы его закроют.

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

Кстати, простой способ проверить:
mkdir tmpdir&&cd tmpdir&& rmdir ../tmpdir
echo $$>/tmp/tmpdirpid
ls . #← не ругнётся, поскольку каталог ещё существует.

В другом шелле:
ls /proc/`cat /tmp/tmpdirpid`/cwd #← опять же не ругнётся

С отмонтированной ФС так не получится. Поэтому есть umount -l, сохраняющий при отмонтировании контекст процессов. Ну или я недостаточно вкурил маны.

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

ls . #← не ругнётся, поскольку каталог ещё существует.

зато ругнётся ls $PWD:

$ mkdir /tmp/testrmdir
$ cd /tmp/testrmdir
$ echo 1 > 1
$ echo 2 > 2
$ ls
1  2
$ rm -r /tmp/testrmdir
$ ls
$ echo 1 > 1
zsh: Нет такого файла или каталога: 1
$ls $PWD
ls: невозможно получить доступ к /tmp/testrmdir: Нет такого файла или каталога

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

Естественно. Имя каталога уже удалилось. Но имя файла и файл — немного разные вещи (а каталог — частный случай файла).

rm -r /tmp/testrmdir

Файлы 1 и 2 предварительно удалились. Т.к. они не были открыты, удалились навсегда.

Это чем-то похоже на вытаскивание удалённых открытых файлов из /proc/<pid>/fd/. У них тоже нет имени, но они существуют.

x3al ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.