如何防止用户删除JVM正在使用的文件

时间:2013-02-05 14:16:16

标签: java unix jvm rm

我有一段JAVA代码,它读取一些文件并将它们保存到内存中一段时间​​。读取后保留文件句柄。我的问题是我想限制用户使用“DEL”键或rm命令删除这些文件。

我可以通过保留文件句柄在Windows上实现相同的功能,而在Unix上,rm不支持​​对文件的锁定。我甚至试过Filechannel.lock(),但也没有帮助。

任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:5)

只要您打开句柄,他们就可以从目录中删除该文件,但是他们无法删除该文件。即,在您关闭文件或进程终止之前,文件不会被删除。

  

我甚至尝试过Filechaanel.lock(),但它也没有帮助。

这是因为它是目录,而不是正在更改的文件。例如如果他们对文件有写入权限,但对目录没有,则无法删除它。

答案 1 :(得分:3)

您还可以查看可用于锁定文件的chattr

chattr +i filename

应该使文件不可删除。然后,您可以通过...

再次删除它
chattr -i filename 

答案 2 :(得分:1)

没有纯Java解决方案。事实上,我认为没有任何解决方案可能没有潜在的恶劣后果。根本问题是UNIX / LINUX无法临时在文件上放置强制锁定。 (用于锁定文件的Linux系统调用是flock,但是flock风格的锁是自行决定的。一个不打扰flock文件的应用程序不会受到文件上其他应用程序锁的影响。)

您可以做的最好的事情是使用chattr +i在文件上设置“immutable”属性。不幸的是,这还有其他影响:

  • 无法将不可变文件写入或链接到其中。

  • 如果您的应用程序在未取消设置属性的情况下崩溃,则会留下一个他/她神秘无法更改或删除的文件。甚至没有sudo或su。