我有一个脚本来检查文件是否存在,如果存在,则从中读取电子邮件地址列表以发送通知。当我不需要通知时,例如,当我在工作中已经监视输出时,我会重命名它。我只是不希望其他管理员删除它。
我知道chattr +i
会使文件不可变,但我只想防止文件被删除。我认为 chattr 程序将使用索引节点号来跟踪属性而不是文件名。
有没有一个实用程序可以实现这一点?
答案1
关于“其他管理员”的评论暗示您已经root
您想要存储文件的系统的权限。您可以通过权限方式设置的任何内容都可以由具有相同权限的人撤消。
如果这不是问题,并且没有人具有扩展权限,那么您可以简单地将文件放入/tmp
或中/var/tmp
,该文件通常设置了 t 位(防止其他人非特权用户来自删除它。您可以 chmod 文件以使其可组写入(并且可由同一组中的其他人修改)。
答案2
“其他管理员”是恶意的吗?他们是来抓你的吗?如果是的话,您可能无能为力。
如果没有,也许最简单的解决方案是更改脚本以将文件放入主目录中。对此的一种变体是在不同的目录中建立指向文件的硬链接;只要他们不删除(取消链接)全部链接,文件仍然完好无损。 (您应该编写另一个脚本来遍历所有链接位置,找到仍然存在的链接位置,然后重新链接所有已删除的链接位置。)请注意,某些编辑器会断开链接(即,如果您编辑文件)。
即使“其他管理员”是恶意的和/或想要抓你,如果他们缺乏经验且不彻底,这也可能解决问题。
或者使文件不可变,并更改脚本以使用其他测试来确定是否发送电子邮件。
答案3
对于其他一些答案中提出的观点,您可以使用该mv
实用程序来建议社交障碍:
mv yourfile THIS_IS_user38537_FILE_PLEASE_DO_NOT_REMOVE
答案4
[替换旧答案]
您可以简单地创建一个到该文件的硬链接:
ln email_file hard_link
然后,如果它被删除,它仍然存在并且可以轻松恢复。
[旧答案,基于对问题的误解]
一种解决方案是使脚本本身不可变chattr
,但打开和关闭它,不是通过重命名它,而是通过存在或不存在可以承受丢失的空文件。称之为,说,
snoozebutton
。如果存在,脚本不会通知。如果不存在,脚本会发出通知。如果有人不小心删除了它,那么这样做会安全失败:您会收到通知,并且还会收到snoozebutton
.
当然,这是假设您不需要经常修改脚本。如果这样做,您将需要运行一个小实用程序脚本chattr
,然后运行编辑器,然后chattr
再次运行以锁定它。