web-dev-qa-db-ja.com

/ tmp内のフォルダーがクリーンアップされないようにするにはどうすればよいですか?

この質問は、私の開発者のラップトップ上のUbuntu 14.10に関するものです。

一時的なものを入れるためにアプリケーションが使用する/tmpにフォルダがあります。このアプリケーションは通常、homedirに一時フォルダーを作成し、後で削除します。何らかの理由で、homedirが暗号化されていると機能しません。その代わり、homedir内で/tmp/fooへのシンボリックリンクを作成しました。私のアプリケーションはそこに書き込み、一時的なサブフォルダーにすることができます。

マシンを再起動するたびに/tmp/fooが削除されるようになりました。今までは、再起動後にフォルダを手動で再作成しました。 / tmpディレクトリはどのようにクリーンアップされますか? で、それを行うジョブがあることを学びました。

私は/etc/init/mounted-tmp.confを見ましたが、私のbashfuと特にfindfuは、私が望むことをするのに十分ではありません。そのファイルからの抜粋を次に示します。

   EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

   # Remove all old files, then all empty directories
   find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
   find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete

私がやりたいのは、/tmp/foo内ではなく/tmp/foo自体のすべてを削除する条件を追加することです。それ、どうやったら出来るの?

12
simbabque

/etc/init/mounted-tmp.confmountallパッケージの一部であるため、そのパッケージの更新および提案された変更は元に戻されます。

$ Sudo dpkg -S /etc/init/mounted-tmp.conf 
mountall: /etc/init/mounted-tmp.conf

代わりに、 Filesystem Hierachy standard(FHS) ;に従って

/ tmp について:

プログラムは、/ tmp内のファイルまたはディレクトリがプログラムの呼び出し間で保持されると想定してはなりません。

/ var/tmp について:

/ var/tmpディレクトリは、システムのリブート間で保存される一時ファイルまたはディレクトリを必要とするプログラムで使用可能になります。したがって、/ var/tmpに保存されたデータは、/ tmpのデータよりも永続的です。

そのため、/var/tmpの代わりに/tmpを使用するようにシンボリックリンクを変更する必要があります。

20
mgor

厳密にはあなたの質問への答えではありませんが、/var/tmpは再起動後にクリーンアップされないため、より適切な場所であると感じるかもしれません。それは一時ファイルのために設計されており、短時間後に自動的に破棄されるべきではありません。

しかし、私がよくやるのは、/ optの下にフォルダを作成して、家に持ちたくないランダムなものを保存することです。これは、メインOSの制御外にあるものを置くのに適した場所です。

8
Andrew Aylett

そのようです:

EXCEPT='! -name .
            ...
            ! ( -path "./foo" )'

   # Remove all old files, then all empty directories
   ...
   find /tmp/foo/* -depth -xdev $TEXPR -delete

例:

$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$

私はユーザーaapに同意します:tmpファイルである場合はそこにディレクトリを再作成することによって使用されるソフトウェアでこれを処理するか、パージされないtmpファイルでない場合は別のディレクトリを使用する必要があります。

6
Rinzwind

将来価値のあるファイルを作成して/ tmpディレクトリに書き込むことはお勧めできません(他の人が提案しているように、/ var/tmpがより良い場所です)。とはいえ、おしゃべりをしてみたいと思うかもしれません。これは、アプリケーションが終了した後、シャットダウンする前に実行する必要があります。この操作では、今後そのディレクトリにanythingが書き込まれないことに注意してください。

touch /tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me

0
Hopping Bunny