Wie verwende ich den Linux-Herde Befehl eine andere Wurzel Prozess zu verhindern, dass das Löschen einer Datei?

StackOverflow https://stackoverflow.com/questions/1040828

Frage

Ich möchte von dem Löschen einer bestimmten Datei eine meiner Wurzel Prozesse verhindern. So kam ich auf die Herde Befehl, so scheint es mein Bedürfnis zu passen, aber ich habe nicht die Syntax bekommen.

Wenn ich nur eine gemeinsame Sperre angeben, funktioniert es nicht:

flock -s "./file.xml"

Wenn ich einen Timeout-Parameter hinzufügen, es immer noch nicht funktioniert:

flock -s -w5 "./file.xml"

Es scheint, dass Art und Weise, sie paßt in flock [-sxun][-w #] fd# Weise. (Was ist der fd# Parameter?)

So habe ich versucht:

flock [-sxon][-w #] file [-c] command

Mit flock -s -w5 "./file.xml" -c "tail -3 ./file.xml" und es funktioniert, Schwanz Befehl an ./file.xml ausgeführt wurde.

Aber ich möchte wissen, tut das Schloss Ende nach dem Befehl oder dauert es 5 Sekunden nach dem Ende der Befehlsausführung? Meine Hauptfrage ist, wie kann ich eine andere Wurzel Prozess aus Löschen einer Datei in Linux verhindern?

War es hilfreich?

Lösung

Nein, Herd nicht daran hindert, jemand von etwas zu tun. Unix Schlösser sind ADVISORY, was bedeutet, dass sie andere Prozesse von Aufrufen auch Flock (oder im Fall von einer gemeinsamen Sperre, verhindert ein weiteres Verfahren unter Verwendung eines exklusiven one) verhindern.

Es ist noch nicht Wurzel, oder sonst jemand, von Lesen, Schreiben oder Löschen der Datei.

Auf jedem Fall, auch wenn es die obligatorische Sperre war, würde es die Datei nicht stoppt gelöscht werden, da es die Datei nicht Eintrag des Verzeichnisses erfaßt werden kann.

Andere Tipps

sudo chattr +i ./file.xml

MarkR korrekt chattr'ing die Datei wird es verhindern, dass sie gelöscht werden:

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

Herd ist nicht das richtige Werkzeug für diesen Job. Wenn Sie ein Programm, das Dateien löscht, sollten Sie das Programm nicht als root ausführen. Sie sollten es als ein anderer Benutzer ausgeführt werden. Unix hat eine sehr gute Unterstützung für die Dateiberechtigungen, aber root ist ein Gott-Konto. Wurzel kann alles, und es gibt keine Berechtigungen für root.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top