Причина, по которой это разрешено, связана с тем, что на самом деле происходит при удалении файла. По идее, задача rm
состоит в том, чтобы удалить запись имени из каталога. Тот факт, что файл может стать недоступным, если это было единственное имя файла, и что индексный дескриптор и пространство, занимаемое файлом, могут быть восстановлены в этот момент, является почти случайным. Название системного вызова, вызываемого командой rm
, то есть unlink
, даже указывает на этот факт.
И удаление записи имени из каталога, по сути, является операцией в этом каталоге , поэтому в этот каталог вам нужно иметь разрешение на запись.
Может быть, вам будет удобнее при следующем сценарии? Предположим, есть каталоги:
/home/me # owned and writable only by me
/home/you # owned and writable only by you
И есть файл, принадлежащий мне и имеющий две жесткие ссылки:
/home/me/myfile
/home/you/myfile
Неважно, как эта жесткая ссылка / home / you / myfile
попала туда в папке первое место. Может, root
туда положил.
Идея этого примера заключается в том, что вам должно быть разрешено удалить жесткую ссылку / home / you / myfile
. В конце концов, он загромождает ваш каталог . Вы должны иметь возможность контролировать, что есть, а что не существует внутри / home / you
.И когда вы удаляете / home / you / myfile
, обратите внимание, что вы на самом деле не удалили файл. Вы удалили только одну ссылку на него.
Обратите внимание, что если бит закрепления установлен в каталоге, содержащем файл (отображается как t
в ls
), то вы do должны быть владелец файла, чтобы иметь возможность удалить его (если только вы не являетесь владельцем каталога). Бит залипания обычно устанавливается на / tmp
.