2009-06-24 13 views
9

Me gustaría evitar que uno de mis procesos raíz elimine un determinado archivo. Así que me encontré con el comando de bandada, parece ajustarse a mi necesidad, pero no obtuve su sintaxis.¿Cómo uso el comando linux flock para evitar que otro proceso raíz elimine un archivo?

Si sólo indican un bloqueo compartido, no funciona:
flock -s "./file.xml"

Si añado un parámetro de tiempo de espera, todavía no funciona
flock -s -w5 "./file.xml"

Parece de esa manera, cabe en flock [-sxun][-w #] fd# manera.
(¿Qué es este parámetro fd #?)

Así, probé el flock [-sxon][-w #] file [-c] command
Usando flock -s -w5 "./file.xml" -c "tail -3 ./file.xml" y funcionó, fue ejecutado en la cola de comandos ./file.xml.
Pero me gustaría saber si el bloqueo finaliza después del comando o si dura 5 segundos después del final de la ejecución del comando. Mi pregunta principal es, ¿cómo puedo evitar que otro proceso raíz elimine un archivo en Linux?

Respuesta

33

No, el rebaño NO impide que nadie haga nada. Los bloqueos Unix son de advertencia, lo que significa que impiden que otros procesos también llamen al rebaño (o, en el caso de un bloqueo compartido, evitan que otro proceso use uno exclusivo).

No impide que root, o cualquier otra persona, lea, escriba o elimine el archivo.

En cualquier caso, incluso si se tratara de un bloqueo obligatorio, no detendría la eliminación del archivo, ya que es el archivo bloqueado y no la entrada del directorio.

+0

Oh, gracias hombre. Voy a probar el bloqueo de la carpeta. Gracias – Danmaxis

+19

No, usted no entiende. Linux no tiene bloqueo obligatorio, normalmente. El bloqueo obligatorio resuelve poco y, en su mayoría, solo permite que una aplicación denegue el servicio a otra sin explicación o forma de manejarla. Si realmente quieres dejar de eliminar un archivo, ruégalo como "inmutable", pero siempre pueden cambiarlo y luego eliminarlo. – MarkR

7

sudo chattr +i ./file.xml

MarkR es correcta chattr'ing el archivo impedirá que se borre:

-(~)-------------------------------------------------------------------------------------------------------(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] --> 
4

rebaño no es la herramienta adecuada para este trabajo. Si tiene un programa que borra 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 raíz es una cuenta de dios. Root puede hacer todo, y no hay permisos para root.

Cuestiones relacionadas