「vi」エディタで編集すると、なぜ inode 値が変わるのでしょうか?

「vi」エディタで編集すると、なぜ inode 値が変わるのでしょうか?

ファイルを編集するときviエディターを使用すると、ファイルの inode 値が変更されます。ただし、コマンドで編集するとcat、inode 値は変更されません。

答え1

ファイルを変更する場合、それぞれに利点と欠点がある 2 つのオプションがあります。

  • ファイルをその場で上書きすることができます。これにより、余分なスペースは使用されず、ハード リンク、アクセス許可、および既存のファイルの内容以外のその他の属性が保持されます。これを行うことの主な欠点は、ファイルの書き込み中に何かが発生した場合 (アプリケーションがクラッシュしたり、電源が切れたりした場合)、部分的に書き込まれたファイルになってしまうことです。
  • 新しいバージョンのファイルを別の名前の新しいファイルに書き込んで、それを所定の場所に移動することができます。この方法では、より多くのスペースが使用され、ハード リンクが壊れます。また、ファイルへの書き込み権限があっても、そのファイルが含まれているディレクトリへの書き込み権限がない場合は、この操作はまったく実行できません。逆に、ファイルの古いバージョンは新しいバージョンに自動的に置き換えられるため、どの時点でもファイル名はファイルの有効で完全なバージョンを指します。

Vim や Emacs などの高度なエディターでは、2 つの方法を選択できます。最初の方法を使用する場合、通常は最初にバックアップ ファイルを作成し、新しいファイルの内容を正しく書き込めない場合に復元できるようにします。

従来の vi はファイルをその場で上書きします。そのため、inode は変更されません。

Vimでは、cjmがすでに述べたように選択は、backupbackupcopyそしてwritebackupオプション。デフォルトでは、Vim は古いファイルの名前を変更し、元のファイルの属性を再作成できると判断した場合は、元の名前で新しいファイルを書き込みます。既存の inode を再利用する場合 (データを失うリスクがある、またはバックアップ コピーの作成にさらに時間を費やす)、set backupcopy yesに を追加します.vimrc

答え2

おそらく、バックアップオプションをオンにし、バックアップコピー「no」または「breakhardlink」に設定します。

関連情報