我想运行一个程序,使其只能创建新的文件而不是覆盖现有的。
这样的事情存在吗?
$ fsaccess --can read,write --not overwrite --command bash -c 'echo "stuff" > filetim; echo "Woohoo I did it"'
现在,如果 filetim 不存在,那么该命令应该运行得很好,但如果 filetim 确实存在,那么 fsaccess 将退出并显示类似消息
Killed child! Command tried to overwrite a file. It does not have permission to do that!
答案1
如果您希望进程能够创建新文件但不覆盖预先存在的文件,请以专用用户身份运行它,并且除了某些最初为空的目录之外,不要向该用户提供任何其他地方的写访问权限。这样程序将无权覆盖任何预先存在的文件。
如果您想运行一个程序并让它假装正在覆盖文件(实际上并非如此),请仅向其授予对上述专用目录的写访问权限,但除此之外,您还可以使用联合文件系统例如奥夫斯,函数,UnionFS熔断器,...,使另一个层次结构也出现在程序中。
如果要保留某个进程覆盖的文件的所有先前版本,请将该进程限制为复制文件文件系统,保留所有文件的所有过去版本。
如果您确实需要允许进程创建新文件但不覆盖文件,即使是它自己的文件,我认为您不会找到任何预先存在的文件。你可以自己写保险丝文件系统。