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

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

考虑以下场景:

用户正在对文件执行命令。此文件现在变为“正在使用”。

$ tail -f somefile.log

在另一个 shell 中,用户删除该文件。

$ rm somefile.log

现在,该文件已被“删除”。这意味着指向文件 inode 的唯一硬链接已消失。如果执行以下命令,您仍然可以看到该文件,标记为“已删除”。

$ lsof | grep somefile.log

在这种情况下,somefile.log直到用户中断命令,才会释放所使用的磁盘空间。tail

我的问题是,是否可以防止用户删除尝试删除时正在使用的文件(类似于 Windows)?可以使用 PAM 来实现这一点吗?

答案1

没有办法“锁定”文件或阻止有权限的用户修改文件。

只要用户拥有write删除文件的文件系统权限(确切地说是权限),他们就能够删除文件。您需要利用用户和文件权限来阻止某人删除文件。

具体来说,我会查看以下命令:

chmod
chown
chgrp
adduser
passwd

答案2

在 Windows 中,当您打开一个文件时,它将被一个进程锁定,并且在该进程释放它之前无法删除或编辑它,这是 Windows 每次更新后需要重新启动的主要原因。

Linux 有另一种机制,允许在文件执行时删除文件,并且您仍然可以使用它,直到使用它的所有进程终止。因此,升级时无需重新启动,这是优点。

当你在 Linux 中删除该文件时,所有对此文件的引用也会被删除,因此如果要解决删除问题,你应该为该文件创建硬链接,或者使用该文件的用户权限。

相关内容