12

我想阻止我的一个根进程删除某个文件。所以我遇到了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 中的文件?

4

3 回答 3

39

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

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

无论如何,即使是强制锁定,也不会阻止文件被删除,因为锁定的是文件而不是目录条目。

于 2009-06-24T20:42:31.727 回答
8

sudo chattr +i ./file.xml

MarkR 是正确的 chattr'ing 文件将防止它被删除:

-(~)-------------------------------------------------------------------------------------------------------(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] --> 
于 2010-03-29T13:41:36.520 回答
6

羊群不是这项工作的正确工具。如果您有一个正在删除文件的程序,则不应以 root 身份运行该程序。您应该以其他用户身份运行它。Unix对文件权限的支持非常好,但是root是神帐号。root可以做任何事情,并且root没有权限。

于 2010-05-24T11:37:28.523 回答