File deletion (source code)

= File deletion

\b[File deletion] removes a <file> from the live naming and allocation structures of a <file system>. It must be distinguished from <data sanitization>, which concerns whether former information remains recoverable. The exact lifetime rules depend on the <operating system> and <file system>; the <Unix> example here uses the documented Linux `unlink` interface.

A successful `unlink` removes a name, represented by a <directory entry>. If another <hard link> names the same <file>, that other name still works. If the final name disappears while the <file> remains open, existing <file descriptors> can continue to access it; storage becomes reusable after the final open reference is closed.<unlink(2) in the Linux man-pages project>[DESCRIPTION, name removal, last-link condition and open-file lifetime]{ref}

For an original lifetime trace, let names `a` and `b` refer to <inode> 42, and let a process hold an open <file descriptor> for it. Removing `a` reduces its <hard link> count from two to one. Removing `b` reduces the count to zero, but the open reference still reaches <inode> 42. Closing that final reference permits reclamation. The counts describe naming and lifetime, not how many times the <file data blocks> have been overwritten.

Deletion also follows the named object's type. If the final path component is a <symbolic link>, `unlink` removes that link rather than its target.<unlink(2) in the Linux man-pages project>[DESCRIPTION, symbolic-link behavior]{ref} A deleted name, a reclaimed allocation and physically erased content are separate claims; observing one does not establish all three.