如何使用Linux的羊群命令,以防止另一根过程从删除文件?
-
22-07-2019 - |
题
我想防止我的根处理中的一个从删除某个文件。所以,我碰到羊群命令,它似乎符合我的需要,但我没有得到它的语法。
如果我仅指示共享锁定,它不工作:
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有文件权限很好的支持,但根本是神帐户。根可以做的一切,并存在用于根没有权限。
不隶属于 StackOverflow