上書き権限なしでファイルを編集する

上書き権限なしでファイルを編集する

ファイルの編集権限を維持しながら上書き権限を付与しないように設定することは可能ですか?

つまり、テキスト エディターでファイルを編集することはできますが、上書きによってファイルを置き換える試みは拒否されます。ユーザーは ですroot。これは、UNIX のファイル権限の一般的な構造ではないことは承知していますが、巧妙なアプローチを探しています。

ファイルのパッケージがあり、その一部は元のバージョンから編集/カスタマイズされています。パッケージを新しいバージョンに更新するときに、変更されていないファイルは置き換えますが、カスタマイズされたファイルは保護します (編集内容を見逃さないようにするため)。現在、これを手動で行う必要があります。つまり、どのファイルが編集され、新しい更新で置き換えられないかを記述します。

答え1

すべてのパッケージは設定ファイルを完全に上書きしようとするので、次のようにしてファイルを追記のみのモードで設定することができます。

chattr +a bb

したがって、ファイルを削除/切り捨てることはできず、追加することしかできません。

ただし、その場合、パッケージ マネージャーによるシステムのアップグレードは停止されます。

パッケージ マネージャーがカスタマイズされたファイルを上書きしないようにしたい場合は、パッケージを保持することができます。debian/ubuntu の場合は、次のようにします。

echo package-name hold | dpkg --set-selections

そうすれば、このパッケージはアップグレードされず、ファイルは保持されます。

答え2

「上書き」が正確に何を意味するかによって異なります。既存のファイルのデータを変更することを意味する場合、オペレーティング システムには「編集」と「上書き」を区別する方法がないため、実行できません。どちらもファイルのデータを変更するものです。ファイルを削除して同じ名前で新しいファイルを作成する (または新しいファイルをこの名前に変更する) ことを意味する場合、ファイルを含むディレクトリから書き込み権限を削除することで実行できます。ただし、これは特定のファイルではなく、そのディレクトリ内のすべてのファイルに適用されます。

答え3

まず、パッケージの重要なファイルをtarで圧縮します。その後アップグレードします。新しいバージョンをインストールしたら、保存したファイルを解凍します。別のディレクトリ、そして編集したファイルとパッケージから新しく追加されたファイルを比較します。こうすることで、新しいファイルにも重要な追加/変更がないか確認できます (つまり、開発者が編集したファイルに変更を加えた可能性があり、その変更も保持する必要があります。新しいファイルに新しい重要な情報が含まれていないかどうかを最初に確認せずに、新しいパッケージから新しく追加されたファイルを古い編集内容で置き換えることはできません)

答え4

root として以下を実行します:

chattr +i foo.txt

次に、次の操作を試してください。

vim foo.txt

vim でファイルを変更して保存してみます。

使用例の 1 つは、chattr +i /etc/resolv.conf です。これにより、厄介なネットワーク マネージャー サービスが、誤って設定された自宅やオフィスのルーターから取得した不良ファイルでそれを上書きすることがなくなります。

以下の方法で元に戻すことができます:

chattr -i foo.txt

Linux ファイルシステム モデルでは、これが最善の方法です。他の解決策はありません。

関連情報