「vi」エディタで編集するとiノードの値が変わるのはなぜですか?


22

「vi」エディタでファイルを編集すると、ファイルのiノード値が変化します。ただし、catコマンドで編集しても、iノードの値は変わりません。

回答:


18

ほとんどの場合、バックアップオプションをオンに設定し、backupcopyを「no」または「breakhardlink」に設定しています。


そのオプションを削除する方法
monu

2
@monu、を編集します~/.vimrc。これらはデフォルト設定ではありません。
cjm

@cjm VIM 7.4ではbackup、my .vimrcに文字列がありませんでしたが、デフォルトは現在のファイルバックアップし、後で削除し/ *可能な限り*ファイルの名前を変更するため*、および*バックアップに*同じ名前の新しい/ *、事実上inode * /を変更します。に追加set backupcopy=yesすることで解決しました.vimrc
キリルブリギン

27

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

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

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

クラシックviはファイルを所定の場所に上書きします。したがって、iノードは変更されません。

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


+1 writebackup既にオフにしbackupているbackupcopyが、iノードはまだ変更されているため、言及するため。
Alireza Mohamadi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.