ファイルとディレクトリの名前が変更または移動されたときに壊れないファイル参照を生成する方法はありますか?たとえば、名前の代わりにinodeでファイルを参照しますか?
答え1
はい、いくつかの方法があります。
- ハードリンク:
ln file1 file2
。これで名前をに変更すると、file2
別の名前になります。または、削除しても引き続きアクセスできます(もちろん、名前を変更または削除しない限り)。これはディレクトリではなくファイルに対してのみ機能し、すべてのリンクは同じファイルシステムに存在する必要があります。file1
file1
file2
- バインドマウント:
mount --bind file1 file2
.ディレクトリでも機能し、同じファイルシステム制限がないことを除いて、ハードリンクに似ています。欠点は、権限のある操作なので、root(または自分のユーザーとマウントの名前空間になければならない)でなければならないことです。 - ファイル記述子:
exec {foo}</some/file
. 一度これを行うと、ファイル/proc/self/fd/$foo
への「魔法の」シンボリックリンクになります(通常のシンボリックリンクのように壊れることはなく、特別な/ proc擬似ファイルシステムのために可能であるという点で「魔法の」シンボリックリンクです)。これはファイルとディレクトリで機能し、特別な権限を必要とせず、子プロセスから自動的に継承されて使用されます。欠点は、それを実行するプロセスが終了するまでのみ持続し、そのパスをあまり制御できないことです。 - name_to_handle_at/open_by_handle_at:これは文字通りの要件を満たしていますが、上記の2つよりも複雑で特権的な作業です。唯一の利点は、ハンドルが一般的なデータであり、どの状態も保存する必要がないことです。