web-dev-qa-db-ja.com

/ tmp内のディレクトリが削除されないようにする

私はよく/tmp一時ファイルを保存するためのLinuxマシンのディレクトリ(たとえば、最初にダウンロードしたいサイトからのPDFなど)と、ユーザー名でディレクトリを作成することがよくあります。ただし、すべての起動時に(すべてのファイルを含む)削除されます。今、私はそれを/var/tmpですが、すべての内容を削除し、ディレクトリ自体は保持したいのですが。そう:

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

これを行う方法はありますか?多分権限または特別な構成で?

10
Linux4win

1つの解決策は、@reboot cronジョブを使用することです。

@reboot mkdir -p "/tmp/$USER"

これをcrontab -eを使用してcrontabに追加すると、マシンが起動するたびに実行されます。

または、

mkdir -p "/tmp/$USER"

シェルの起動ファイル内。

どちらの場合でも、使用することもできます

TMPDIR=/tmp/$USER
export TMPDIR

そのディレクトリをデフォルトの一時ディレクトリとして使用する場合は、シェルの起動ファイル内。

4
Kusalananda

私は pam-tmpdir を使用します:ログイン時にユーザー専用の一時ディレクトリを作成します。設定するには、

session optional pam_tmpdir.so

適切なPAMサービスに。 Debianベースのシステムでは、libpam-tmpdirパッケージをインストールすると、これが実行されます。または、/etc/pam.d/common-sessionに行を追加できます。次回ログインすると、/tmp/userの下にユーザーIDのディレクトリがあり、TMPTMPDIRが適切に設定されています。

14
Stephen Kitt

Systemdを使用してシステムを実行しておらず、systemd-tmpfilesを使用してクリーンアップを管理している場合は、そのシステムを使用してディレクトリを設定する必要があります。

これが 完全なドキュメント です。次のような内容で/etc/tmpfiles.d/something.confを作成することで、希望どおりの結果を得ることができます。

d     /tmp/your_username   0750 your_user your_group  - -
2
viraptor

コメントで指摘したように、/tmpは一時的なファイルで、削除しても見逃されません。途中でマシンが再起動すると、そこに書き込んだものがすべて消えて最初からやり直す必要があります。つまり、これらのファイルが一時的なものではなかった可能性があります。

私は、ギガバイトが大量のスペースだったときから、ホームディレクトリに一時ディレクトリを何年も維持していましたが、古くて壊れやすいファイルを取り除くために定期的なグルーミングが必要であることに気付きました。ほとんどの場合、そのプロセスの後に残ったものは数週間前のものだったので、毎日1回実行するcronジョブでクリーンアップします。

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

セミテンポラリとしてダウンロードまたは作成したものはすべてそこに行き、システムは残したものをすべてクリーンアップします。永続的なホームが必要なものは、cronジョブがそれを取り除く前に1つ取得します。

1
Blrfl