linux flockコマンドを使用して、別のルートプロセスがファイルを削除しないようにするにはどうすればよいですか?

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

質問

ルートプロセスの1つが特定のファイルを削除しないようにしたい。それで、flockコマンドに出くわしました。それは私のニーズに合っているようですが、その構文はわかりません。

共有ロックのみを指定すると、機能しません:

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でtailコマンドが実行されました。

しかし、知りたいのは、コマンドの実行後にロックが終了するのか、それともコマンドの実行が終了してから5秒後に実行されるのですか?私の主な質問は、Linuxで別のルートプロセスがファイルを削除しないようにするにはどうすればよいですか?

役に立ちましたか?

解決

いいえ、flockは誰も何もすることを妨げません。 UnixロックはADVISORYです。つまり、他のプロセスがflockを呼び出すことを防ぎます(または共有ロックの場合、排他ロックを使用する別のプロセスを防ぎます)。

rootや他の誰かがファイルを読み取り、書き込み、または削除することを停止しません。

いずれにせよ、それが必須のロックであっても、ディレクトリエントリではなくロックされているファイルであるため、ファイルの削除は停止されません。

他のヒント

sudo chattr + i ./file.xml

MarkRは正しいです。ファイルを削除すると、ファイルが削除されなくなります。

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

flockは、このジョブに適したツールではありません。ファイルを削除するプログラムがある場合は、そのプログラムをルートとして実行しないでください。別のユーザーとして実行する必要があります。 Unixはファイルのアクセス許可を非常によくサポートしていますが、rootはgodアカウントです。ルートはすべてを実行でき、ルートに対する権限はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top