我有一段JAVA代码,它读取一些文件并将它们加载到内存中一段时间。读取后保留文件句柄。我的问题是我想限制用户使用“DEL”键或 rm 命令删除这些文件。
我可以通过保留文件句柄在 Windows 上实现相同的效果,而在 Unix 上 rm 不支持文件锁定。我什至尝试过
Filechannel.lock()
,但也没有帮助。
如有任何建议,我们将不胜感激。
只要您打开句柄,他们就可以从目录中删除该文件,但无法删除该文件。即,在您关闭文件或进程终止之前,文件不会被删除。
我什至尝试了 Filechaanel.lock() 但它也没有帮助。
那是因为正在更改的是目录,而不是文件。例如如果他们对文件有写访问权限,但没有对目录的写访问权限,则他们无法删除它。
对此没有纯 Java 解决方案。事实上,我认为没有一个解决方案不会带来潜在的严重后果。根本问题是 UNIX / LINUX 没有办法临时对文件施加强制锁定。
(用于锁定文件的 Linux 系统调用是
flock
,但集群式锁是任意的。任何不费心 flock
文件的应用程序都不会尊重其他应用程序在文件上放置的任何任意锁。 )
您能做的最好的事情就是使用
chattr +i
设置文件的“不可变”属性。不幸的是,这还有其他影响:
不可变文件无法写入或链接到其中任何一个。
如果您的应用程序崩溃而没有取消设置属性,则用户将留下一个他/她神秘地无法更改或删除的文件。即使使用 sudo 或 su 也不行。