Esta es la respuesta más correcta que te podemos compartir, pero primero estúdiala pausadamente y analiza si se puede adaptar a tu proyecto.
No, el rebaño NO impide que nadie haga nada. Los bloqueos de Unix son CONSEJOS, lo que significa que evitan que otros procesos también llamen a flock (o en el caso de un bloqueo compartido, evitan que otro proceso use uno exclusivo).
No impide que root, ni nadie más, lea, escriba o elimine el archivo.
En cualquier caso, incluso si fuera un bloqueo obligatorio, no impediría que se elimine el archivo, ya que es el archivo el que se bloquea, no la entrada del directorio.
sudo chattr +i ./file.xml
MarkR es correcto chatear el archivo evitará que se elimine:
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
[email protected] [2135] --> sudo chattr +i junk.txt
[sudo] password for risk:
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
[email protected] [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)
[email protected] [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)
[email protected] [2138] -->
flock no es la herramienta adecuada para este trabajo. Si tiene un programa que elimina archivos, no debe ejecutar ese programa como root. Debe ejecutarlo como un usuario diferente. Unix tiene muy buen soporte para permisos de archivos, pero la cuenta de root es una buena. La raíz puede hacer todo, y no hay permisos para la raíz.