2009-06-24 82 views
9

我想阻止我的某个根进程删除某个文件。所以我遇到了羊群的命令,它似乎符合我的需要,但我没有得到它的语法。如何使用linux 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秒?我的主要问题是,如何防止另一个根进程在linux中删除文件?

回答

33

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

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

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

+0

噢,谢谢你。 我会尝试文件夹锁定。 谢谢 – Danmaxis 2009-06-24 20:51:06

7

sudo chattr +i ./file.xml

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

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2135] --> sudo chattr +i junk.txt 
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [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) 
[email protected] [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) 
[email protected] [2138] --> 
4

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

相关问题