Это то же, что и для временных файлов.
Напомним, что обычный способ создания временного файла - open(2) файл (сохраняющий его файловый дескриптор), затем unlink(2) (при этом все еще имеется открытый файловый дескриптор). Затем данные файла остаются в файловой системе до тех пор, пока выполняется процесс, и не имеют close(2) -d этого файлового дескриптора.
Это потому, что файлы действительно inodes -не имена файлов в каталогах. (каталоги содержат записи, связывающие имена с inode).
Ядро управляет набором «б» (или «открыто») дескрипторы, и этот набор содержит дескрипторы, выполняемые процессы (собственно, дескрипторы, участвующие в некотором отображении адресов, как через mmap(2) или execve(2))
Поэтому сразу после запуска /bin/rm /bin/rm
ядро имеет одну ссылку на rm
двоичный файл как исполняемый файл процесса.
Когда он обрабатывает системный вызов unlink
, он имеет временные две ссылки (один из которых является процессом в процессе выполнения, другой путь /bin/rm
передан в реализацию ядра unlink
) и уменьшает его до одного.
Конечно, вам следует избегать ввода /bin/rm /bin/rm
, но тогда у вас обычно есть отдельная оболочка, например, sash
, чтобы иметь возможность исправить вашу систему.