В Linux файл — это inode, а имя в файловой системе лишь ссылка на него.
Открываешь файл через файловый дескриптор:
$ exec 3<>file.txt
$ ls -li file.txt
Удаляешь файл из файловой системы:
$ rm file.txt
$ ls file.txt
Файла как бы нет, но дескриптор остаётся открыт.
Продолжаешь писать в уже удалённый файл:
$ echo "hello" >&3
$ sync
Данные реально записываются, просто файл больше не имеет имени в файловой системе.
Поэтому иногда диск заполнен, но du “ничего не показывает”.
🔥 Это механизм, на котором держится лог-ротация и поведение демонов. Если процесс держит удалённый файл, он продолжает занимать место на диске, пока не закроет дескриптор.
🚪 Linux Ready | #совет
