
を使用して一時ディレクトリを作成するスクリプトがありますmktemp -d
。
一時ディレクトリに生成されるフォルダーは、マシンの別の部分にコピーされるスクリプトの出力です。
内容を別の場所にコピーするのではなく、同じフォルダーを使用することを検討していました。ディレクトリ内のフォルダーのバージョンが OS によってクリーンアップされたln
場合でも、それがまだ残っているかどうか疑問に思っていました。/tmp
答え1
一時ディレクトリがどこにあるかによって異なります。つまり、独自の一時ディレクトリを作成しましたか、それともシステムの ( /tmp
) を使用していますか?
あなたのシナリオでは、一時ディレクトリがクリーンアップされた後もファイル/フォルダーが残ることを期待しています。
システムのディレクトリ内にある場合は/tmp
、システムによってクリーンアップされる可能性があります (ディストリビューションによって異なりますが、ほとんどの場合、cron
ジョブまたは同様のものがあります)。
さらに、いくつかのディストリビューションは/tmp
を使用してディレクトリを作成します。つまり、tmpfs
コンテンツは RAM/スワップに保持され、再起動すると保持されません。
ファイルにアクセスできるようにするには、難しいtmpfs
/tmp
リンク。ただし、ハード リンクは 1 つのマウントされたファイルシステム内でのみ作成できます。と (例)ext4
にマウントされたファイルシステムの間にハード リンクを作成することはできません/mystuff
。
作成することができます柔らかいマウントされた場所から/mystuff
どこかへのリンクですが、一時ファイルが削除されると、リンクは「どこにも」を指すようになります。これにより、オブジェクトがわずかに無効になります。tmpfs
/tmp
ディストリビューションの/tmp
ファイルが、ファイルを保存する予定の場所 ( /mystuff
) と同じマウントにある物理ディスク上にある場合、システムがクリーンアップする前にリンクが作成されている限り、ハード リンクは機能します/tmp
。
答え2
よりわかりやすくするために例を挙げてみました。
特定のディレクトリ内に 2 つのファイルを作成しました。
cat sourcefile
This is the sourcefile.
##This is to create a hard link.
ln sourcefile destfile
##List the files available.
ls
destfile sourcefile
cat destfile
This is the sourcefile.
ここで、ハードリンク上記のようにディレクトリ内のファイルを参照する場合/tmp
、ソース ファイルを削除すると何が起こるかを見てみましょう。
rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
This is the sourcefile
上記のシナリオでは、destfile
には引き続きアクセスできます。
ここで、ソフトリンクを使用すると何が起こるかを見てみましょう。
cat sourcefile
This is the sourcefile for softlink example.
ln -s sourcefile destfile
ls -l
total 4
lrwxrwxrwx 1 root root 10 Jun 26 13:40 destfile -> sourcefile
-rw-r--r-- 1 root root 46 Jun 26 13:40 sourcefile
さて、シナリオに従ってソースファイルを削除して何が起こるか見てみましょう。
rm sourcefile
rm: remove regular file `sourcefile'? y
ls
destfile
cat destfile
cat: destfile: No such file or directory
したがって、ソフトリンクを使用すると、データが存在しない可能性があります。
編集
mktemp
私は一時ファイルを作成するために使用し、ハードリンクディレクトリから/tmp
作業ディレクトリの 1 つに移動します。
マシンを再起動して、再起動後もコンテンツが利用可能かどうかを確認しました。ハードリンク再起動後も内容は利用可能になります。これをチェックする理由は、再起動中に/tmp
ディレクトリが通常クリアされるためです。