我想阻止我的根进程的一个从删除某个文件。 所以,我碰到羊群命令,它似乎符合我的需要,但我没有得到它的语法。
如果我只是指出一个共享锁,这是行不通的:
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尾命令被执行。
不过,我想知道,是否锁定端的命令后,或做它最后5秒的命令执行结束后? 我的主要问题是,我怎么能阻止删除在linux文件中的另一个根进程?
不,羊群不会阻止任何人做任何事情。 Unix的锁是咨询,这意味着它们防止其他进程也调用flock(或在一个共享锁的情况下,使用专用一个阻止另一进程)。
它不会停止根,或其他任何人,读取,写入或删除文件。
在任何情况下,即使它是一个强制性的锁,它不会阻止文件被删除,因为它是被未锁定的目录项的文件。
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] -->
羊群是不是这个工作的工具。 如果您有删除文件的程序,您不应该运行该程序的根目录。 你应该运行它为不同的用户。 Unix有文件权限很好的支持,但根本是神帐户。 根可以做一切,并有根没有权限。
文章来源: How do I use the linux flock command to prevent another root process from deleting a file?