我想阻止我的某个根进程删除某个文件。所以我遇到了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中删除文件?
发布于 2009-06-24 20:42:32
不,flock不会阻止任何人做任何事情。Unix锁是建议性的,这意味着它们可以防止其他进程也调用flock (或者在共享锁的情况下,防止另一个进程使用独占锁)。
它不会阻止root或其他任何人读取、写入或删除该文件。
在任何情况下,即使它是一个强制锁,它也不会阻止正在被删除的文件,因为它是被锁定的文件,而不是目录条目。
发布于 2010-03-29 21:41:37
sudo chattr +i ./file.xml
MarkR是正确的,对该文件进行chattr将防止其被删除:
-(~)-------------------------------------------------------------------------------------------------------(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-05-24 19:37:29
flock不是这项工作的合适工具。如果您有一个删除文件的程序,则不应以root身份运行该程序。您应该以不同的用户身份运行它。Unix对文件权限有很好的支持,但是root是一个神的帐号。root可以做任何事情,Root没有权限。
https://stackoverflow.com/questions/1040828
复制相似问题