我想防止我的根处理中的一个从删除某个文件。所以,我碰到羊群命令,它似乎符合我的需要,但我没有得到它的语法。

如果我仅指示共享锁定,它不工作:

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有文件权限很好的支持,但根本是神帐户。根可以做的一切,并存在用于根没有权限。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top