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