書き込み権限のあるファイルを開いたとします。
その間、一部のエディタでファイルを開いたまま、権限を変更して書き込み権限を削除します。
編集して保存するとどうなりますか?
承認された回答:
ファイルを開くときに、ファイルのアクセス許可がチェックされます。権限を変更しても、ファイルを既に開いているプロセスがそれを使用して実行できることには影響しません。これは、追加の権限で開始し、ファイルを開いてから、それらの追加の権限を削除するプロセスで使用されることがあります。ファイルには引き続きアクセスできますが、再度開くことはできない場合があります。
ただし、編集者は通常、ファイルを開いたままにしません。編集者がドキュメントを開くと、内部で発生するのは、編集者がファイルの内容をメモリにロードしてファイルを閉じることです。ドキュメントを保存すると、エディタがファイルを開き、新しいコンテンツを書き込みます。
編集者は、ファイルを保存するときに2つの戦略のいずれかに従うことができます。彼らは新しいファイルを作成し、それを所定の場所に移動することができます。または、既存のファイルを開いて古い内容を上書きすることもできます。上書きには、ファイルの権限と所有権が変更されないという利点があり、読み取り専用ディレクトリでも機能するという利点があります。上書きの主な欠点は、保存が途中で失敗した場合(エディターのクラッシュ、システムのクラッシュ、ディスクがいっぱいなど)、ドキュメントが切り捨てられたままになることです。さまざまな編集者がさまざまな戦略を選択します。良いものは、可能であればwrite-to-new-then-moveを実行し、読み取り専用ディレクトリでのみ上書きします(別の場所にバックアップを作成した後)。
エディターがnew-then-move戦略に従っている場合、ファイルのアクセス許可は重要ではありません。エディターは新しいファイルを作成し、そのためのディレクトリへの書き込みアクセス許可のみが必要です。 2つの例外があります。ディレクトリにスティッキービットがある場合、ファイルの所有権を変更すると(権限ではなく)、プロセスが新しいファイルを所定の位置に移動できなくなる可能性があります。もう1つの例外は、ACLを介した削除権限をサポートするシステム(OSXなど)です。ファイルから削除権限を取り消すと、移動が不可能になる場合があります。
エディターが上書き戦略に従っている場合、書き込み権限を取り消すと保存が不可能になります。 (ただし、デフォルトで上書きする一部のエディターは、new-then-moveにフォールバックする場合があります。)
関連:文字を含むファイル名を変更するにはどうすればよいですか?
Vimでは、backupcopy
をオフにすることで、上書き戦略を強制できます。 オプション; 「vi」エディタで編集すると、iノードの値が変わる理由も参照してください。 Emacsでは、backup-by-copying
を設定することで、上書き戦略を強制できます。 t
への変数 。