
Я хочу сделать файл заблокированным от удаления, но при этом доступным для записи. Как это сделать?
Файл, о котором идет речь, представляет собой том Truecrypt, размещенный на сетевом ресурсе NAS SMB, поэтому я не хочу случайно удалить его.
решение1
Для Windows:
- Запретить удаление файла.
- Удалите или отмените разрешение «Удаление дочерних элементов» для родительского каталога.
Для Unix (включая OS X):
- Удалить разрешение «Запись» для родительского каталога.
Обратите внимание, что это только предотвратит удаление файла, но не сделает ничего против случайного усечения или перезаписи мусором. Если файл доступен для записи, вы можете записать в него что угодно, и точка.
Кроме того, права доступа к файлам практически невозможно перевести между операционными системами. Если NAS работает под управлением Linux, и вы пытаетесь установить права доступа из Windows, конечный результат может отличаться от ожидаемого.
решение2
В Linux вы можете создать жесткую ссылку на него. Затем вы можете записывать в него и "удалять" его, но вы удалите только ссылку в вашем каталоге. Другая жесткая ссылка все равно будет указывать на содержимое файла, так что он в любом случае не будет удален.
В мире Unix вы не "удаляете" файлы. Вы просто уменьшаете количество жестких ссылок на них. Когда на них больше ничего не указывает, пространство считается свободным и может быть использовано...
решение3
Резервные копии. Вы не можете защитить записываемый файл отповреждатьдаже если вы можете удалить. Резервное копирование ежедневно.
решение4
В файловой системе cow, такой как btrfs, вы можете добиться этого, используя подтома + снимки или cp с --reflink=always, это фактически приведет к тому, что будет столько файлов, сколько вы хотите, которые будут занимать столько же места, сколько и один + некоторые накладные расходы (но без безумного количества копий или снимков, особенно в сочетании с крошечными размерами файлов, это не должно быть заметно), пока они не будут изменены, в этом случае только измененные части будут храниться отдельно, а остальное по-прежнему будет общим. Затем установите разрешения для каждого отдельно (чтобы добиться того, чего вы хотите, просто регулярно делайте снимок или копию с разрешениями только для чтения (и по желанию монтируйте его как ro или не как all, если это снимок, а если это файл, используйте chattr +i (пользователи не могут писать или изменять файл, даже если у них есть разрешения на запись) на одной копии, если вы параноик).