どこかにハードリンクされたファイルを編集して保存しようとするたびに、編集者mcedit
はハードリンクを削除するかどうかを尋ねます。これはLinuxの一般的な動作ですか、それともmcedit
「特別な」動作ですか? fsckや他の管理ツールではなく、一般的なアプリケーションがハードリンクに興味を持っているのはなぜですか?
答え1
ファイルを変更したい場合は、2つのオプションがあり、各オプションには長所と短所があります。
- その場所にファイルを上書きできます。これは余分なスペースを使用せず、既存のファイルコンテンツ以外のハードリンク、権限、およびその他の属性を保持します。この方法の主な欠点は、ファイルが記録されている間に何かが起こると(アプリケーションがクラッシュしたり、停電が発生した場合)、ファイルが部分的に記録されることです。
- ファイルの新しいバージョンを別の名前の新しいファイルに書き込み、その場所に移動できます。これは、より多くのスペースを使用し、ハードリンクを壊し、ファイルへの書き込み権限があるがファイルに含まれているディレクトリがない場合、これを行うことはできません。一方、以前のバージョンのファイルは自動的に新しいバージョンに置き換えられ、すべての時点でファイル名はファイルの有効で完全なバージョンを指します。
Mceditはどの戦略を選ぶかを尋ねています。ただし、奇妙なことに、単一のディレクトリエントリを持つファイルに対するmceditのデフォルトポリシーは、既存のファイルを切り取り、データを危険にさらすことです。セキュリティポリシーによってハードリンクが中断された場合にのみ使用できます。 [オプション]メニューの[保存モードの編集]ダイアログボックスでこの設定を変更できます。 「クイック保存」は上書きを意味し、「安全に保存」とは一時ファイルに保存してから名前を変更することを意味します。セーフモードを選択した場合、シンボリックリンクを切断しないオプションはありません。
(mc 4.8.3で観察されたものです。これがまだ最新バージョンに存在する場合は、デザインバグとして報告することを検討してください。「セーフモード」がデフォルトでなければならず、そのモードで実行するオプションが必要です。リンクケースを破損しないでください。)
VimやEmacsなどの良いエディタを使用すると、基本的な戦略を選択できます。
答え2
これは珍しいことです。引き続き自分の足を撃つ開発者がデザインしたようです。
複数のリンクを持つファイル(「一般」ファイルがそのディレクトリに接続されている)に書き込むと、別のパスに存在する可能性があるファイルが変更されます。シンボリックリンクでも同じ問題が発生しますが、リンクしたいファイルには自分自身を指すシンボリックリンクがあることがわかりません。
マルチリンクファイルに書き込むと、マルチリンクのコアである他のファイルパスを介して表示される内容が変更されます。
答え3
これは、保存する前にバックアップファイルを作成するときに深刻な影響を与えます(私の考えではmcedit
そうです)。ハードリンクがどのように処理されるかに応じて、そのinodeへの他のパスが間違ったファイルを指す可能性があります。これを見て。
これがバックアップファイルとは関係がない場合は、おそらく警告だけです。次のようにお読みください。 「忘れた場合:/foo/barだけを変更するのではなく、/bar/bazも変更します。」