ファイルが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 .
。