テキストエディタでハードリンクが見つからない場合はどうすればよいですか?

テキストエディタでハードリンクが見つからない場合はどうすればよいですか?

ファイルが1つあります。この場合、名前を に指定します$HOME/Documents/hello.txt

Hello, welcome to my text file

このファイルをここにハードリンクします$HOME/Documents/Backup/hello.txt

いいね、いいですね。今これはハードリンクされています。元のファイルに書き込むと、ハードリンクが更新されます。

echo "Hello again" >> $HOME/Documents/hello.txt
cat $HOME/Documents/hello.txt
Hello, welcome to my text file
Hello again
cat $HOME/Documents/Backup/hello.txt
Hello, welcome to my text file
Hello again

私の問題は、一時ファイルを生成する多くのプログラムを使用して2つのファイルの1つ(ハードリンクコピー)を開くたびにリンク関係が失われ、両方のファイルが他のファイルを更新しないことです。

それでは、このような状況でどうすればよいですか?

注:一部のファイルのバックアップにはGithubのハードリンクを使用しており、Gitはシンボリックリンクに従わないため、この場合はシンボリックリンクを使用できません。

答え1

モスビーが言ったようにこのコメント、ほとんどの編集者は元のファイルのコピーを編集し、それを置き換え(削除)します。これによりセキュリティが向上しますが、ハードリンクが失われます。

ただし、GNU Emacsなどの一部のエディタは、ファイル編集を実行するように設定できます。所定の位置につまり、シェルで行うように元のファイルを直接変更するという意味です。例えばこの問題答えはGnu Emacsに関するあなたの質問を正確に説明します。したがって、エディタの構成を最初に考慮する必要があります。

Gitへのハードリンク(?)のみが必要なため、残念ながらワークフローについて詳しく説明しないため、プッシュするアイテムをコミットする直前にGitフックを使用して正しいハードリンクをリセットする可能性が高くなります。 GitHub:このpre-commitフックは有望な候補のようです。マニュアルページをご覧くださいGit フック(5)もっと学ぶ。

答え2

すでに説明したようにユルゲンそしてモスビー、ハードリンクの問題は、ほとんどの編集者が元のファイルのコピーを編集し、後でそれを置き換え(削除)して変更を伝播するのではなく、2つの異なるコピーで終わるということです。

これを防ぐための簡単な解決策は、別のパスにリンクされているファイルの「インデックス」と同じディレクトリにハードリンクセットを配置し、新しいinodeがそのディレクトリに書き込まれるのを防ぐことです。

権限を読み取り専用に設定するだけです。

chmod a-w .

または、ロックプロパティを設定して(HFS + / APFSファイルシステムのみ):

SetFile -a L .

これにより、ユーザー/編集者はこの「インデックスディレクトリ」に他のファイルを書き込むことができませんが、編集者が許可した場合は既存のハードリンクを変更できます(たとえば、ハードリンクを正しく編集できるVIMを使用)。別のハードリンクを追加するには、反対のコマンド(chmod u+w .または)を使用して書き込みモードをリセットしますSetFile -a l .

関連情報