我想阻止我的一个根进程删除某个文件。 所以我遇到了羊群的命令,这似乎符合我的需要,但我没有得到它的语法。
如果我只表示一个共享锁,它不起作用:
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秒,locking是否结束? 我的主要问题是,我怎样才能防止另一个根进程在linux中删除文件?
不,鸡群不会阻止任何人做任何事情。 Unix锁是ADVISORY,这意味着它们阻止其他进程调用flock(或者在共享锁的情况下,阻止另一个进程使用独占锁)。
它不会阻止root或其他人阅读,写入或删除文件。
在任何情况下,即使它是一个强制性的锁定,它也不会停止被删除的文件,因为它是被锁定的文件而不是目录条目。
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] -->
鸡群不是这个工作的正确工具。 如果您的程序正在删除文件,则不应以root身份运行该程序。 你应该运行它作为一个不同的用户。 Unix对文件权限有非常好的支持,但root是一个神的帐号。 根可以做任何事情,并且没有根权限。