私は自分のプロジェクト用にいくつかのbashスクリプトを書き始めており、それらにはいくつかの中間ファイルまたは変数を書き込む必要があります。
誰かがスクリプトを実行したときに、どのフォルダーにアクセスできるかを確認できますか?使用するのは一般的な習慣/tmp/
ですか?それとも、何か他のものを使用する必要がありますか?
私は自分のプロジェクト用にいくつかのbashスクリプトを書き始めており、それらにはいくつかの中間ファイルまたは変数を書き込む必要があります。
誰かがスクリプトを実行したときに、どのフォルダーにアクセスできるかを確認できますか?使用するのは一般的な習慣/tmp/
ですか?それとも、何か他のものを使用する必要がありますか?
回答:
このようなものを探すとき、Filesystem Hierarchy Standardドキュメントは非常に貴重だと思います。
いくつかのオプションがありますが、
保存するデータの種類によって異なります。
スクリプトまたはアプリケーションが実行されている間だけ持続する一時ファイルを作成する必要がある場合は、TMPDIR
環境変数で指定されたディレクトリを使用するか、その変数が定義されていない場合は、を使用します/tmp
。
/tmp
一部のシステムではブート時にクリアされます(たとえば、Solarisや一部のLinuxインストールではデフォルトでRAMにあることもあります)。そのため、停電や再起動に耐えなければならないファイルには使用できません。/var/tmp
再起動後も存続する必要があるファイルに使用できますが、システム管理者によって適宜削除される場合があります。アプリケーションのニーズが永続的にファイルを保存する場合は、ユーザのホームディレクトリ内(のどこかにそれらを書く~/.programmingnoobsapp
か~/.cache/programmingnoobsapp
)、または下/var/lib/programmingnoobsapp
か/var/cache/programmingnoobsapp
。
これ/tmp
はすべてのユーザー間で共有されるため、そこでファイルを作成する際には注意が必要です。まだ存在しないファイル名を選択する必要があります。また、別のプロセスが別のアクセス許可を使用してファイルを作成する競合状態を許可しないように注意する必要があります。別のユーザーとして実行されている場合、プロセスのデータにアクセスして変更できます)。使用mktemp
中のファイルを作成するコマンドを/tmp
か/var/tmp
。デフォルトでmktemp
は、にファイルを作成します。設定されてい$TMPDIR
ない/tmp
場合TMPDIR
は、通常は適切な場所です。複数の一時ファイルを使用する必要がある場合、または単一の一時ファイルが必要な場合でも、すべての一時ファイル用のディレクトリを作成することをお勧めしますmktemp -d
スクリプトの最後で削除します。
#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…
tmp_root
割り当てる前に初期化するのはなぜですか?それはより自然ではunset
ないでしょうか?
set -u
、それは一般的ではありません)。トラップを設定した直後にスクリプトが強制終了された場合に備えて、トラップを設定する前に安全な値に設定する必要があります。
set -o errexit
ている場合tmp_root
、間違ったディレクトリが破壊されないように追加します
これまでに既に投稿された回答を補完するためだけに。
あり、/dev/shm
一時的に記憶するために使用することができ、いくつかのLinuxディストリビューション。このストレージは、ファイルI / Oのパフォーマンスがファイルシステム/dev/shm
を使用する重要な要素である場合にのみ使用してくださいtmpfs
。また、適度なサイズのファイルとデータにも使用する必要があります。tmpfs
それはブートから起動するように永続的ではありませんので、ファイルシステムは、ストレージなどのシステムRAMを使用しています。
StackOverflowで説明されているすべての選択肢の概要は、Linuxでの一時ファイルストレージの/ tmp vs. / dev / shmというタイトルのこのQ&Aにもあります。。このスーパーユーザーに関するQ&A:/ dev / shm /をいつ使用し、/ tmpをいつ使用する必要がありますか?。
はい、/tmp
主に一時的に必要なファイル用です。/ tmpにはスティッキービットがあります。これは、アイテムの所有者、ディレクトリの所有者、またはスーパーユーザーのみがファイルの名前を変更または削除できることを意味します。多くのプログラムはこれを使用してロックファイルを作成し、データを一時的に保存します。一部のディストリビューションでは、このディレクトリはブートアップまたはシャットダウン時に消去されます。