如何使用linux flock命令阻止其他根进程删除文件?

时间:2009-06-24 20:35:25

标签: linux bash file-locking flock

我想阻止我的一个根进程删除某个文件。所以我遇到了flock命令,它似乎符合我的需要,但我没有得到它的语法。

如果我只指示共享锁,则不起作用:
flock -s "./file.xml"

如果我添加超时参数,它仍然无效 flock -s -w5 "./file.xml"

似乎这样,它符合 flock [-sxun][-w #] fd# 的方式 (这个fd#参数是什么?)

所以,我尝试了 flock [-sxon][-w #] file [-c] command
使用flock -s -w5 "./file.xml" -c "tail -3 ./file.xml"并且它有效,执行了./file.xml中的tail命令。
但我想知道,锁定在命令执行后结束还是在命令执行结束后持续5秒?我的主要问题是,如何防止其他root进程在linux中删除文件?

3 个答案:

答案 0 :(得分:34)

不,flock不会阻止任何人做任何事情。 Unix锁是ADVISORY,这意味着它们阻止其他进程也调用flock(或者在共享锁的情况下,阻止另一个进程使用独占进程)。

它不会阻止root或其他任何人读取,写入或删除文件。

在任何情况下,即使它是强制锁定,它也不会阻止文件被删除,因为它是被锁定的文件而不是目录条目。

答案 1 :(得分:7)

sudo chattr +i ./file.xml

MarkR是正确的聊天文件将阻止它被删除:

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2135] --> sudo chattr +i junk.txt
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2136] --> sudo rm ./junk.txt 
rm: cannot remove `./junk.txt': Operation not permitted
zsh: exit 1     sudo rm ./junk.txt
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2137] --> sudo rm -f ./junk.txt
rm: cannot remove `./junk.txt': Operation not permitted
zsh: exit 1     sudo rm -f ./junk.txt
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2138] --> 

答案 2 :(得分:4)

flock不适合这份工作。如果您有一个删除文件的程序,则不应以root身份运行该程序。您应该以其他用户身份运行它。 Unix对文件权限有很好的支持,但root是一个神帐户。 Root可以执行所有操作,并且没有root权限。