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


10

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

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

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


1
回避策として、必要に応じて「test&mkdir」を実行するためにシェルのログインファイルにコードを挿入することができます。
ジェフシャーラー

3
/tmpおそらくtmpfsファイルシステムです。これらのファイルは実際には削除されません。それらは単にRAMに保存され、再起動時に失われます。そのため、「ブート時またはログイン時にそれを再作成する」という結果が得られます
MSalters

回答:


4

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

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

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

または、

mkdir -p "/tmp/$USER"

シェルのスタートアップファイル内。

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

TMPDIR=/tmp/$USER
export TMPDIR

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


これは、a)すべてのユーザーのディレクトリを作成し、b)「コールド」スタートアップからもトリガーしますか?
Linux4win

1
@ Linux4winこれは、質問の言い方なので、単一のユーザーのニーズに対応します。マシンの起動方法(ホット、コールド、ぬるいウォーム)は関係ありませんが、休止状態から再開するときにトリガーされません(起動しないため)。
クサラナンダ

何らかの理由で@reboot mkdir -p "/tmp/$USER"crontabの最後に追加しても何も起こりませんが、実行するとmkdir -p "/tmp/$USER"実際にディレクトリが作成されます。ちなみに2つ目は機能しません。/tmp他のプログラムからアクセスする必要があり、毎回シェルを起動するのがちょっと面倒です...
Linux4win

@ Linux4win @rebootcronジョブはディレクトリを作成しませんか?cronデーモンからのエラーメッセージを含むメールがアカウントに送信されていますか?
クサラナンダ

まあいや...私は設定していないのでmail?それとも必要ありませんか?
Linux4win

14

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

session optional pam_tmpdir.so

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


7
適切なPAMサービスとは何か、どのようにラインをそれらに追加できるかを説明できますか?どのファイルを編集する必要がありますか?
terdon

2

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

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

d     /tmp/your_username   0750 your_user your_group  - -

1

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

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

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

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


mkdir a a/b; touch a/b/c。30日が経過するまで待ちます。削除するcと更新されますb。つまり、さらに30日間待つ必要があります。同様aにあなたが削除したときb。次に、ファイルを作成しても30日間b操作しないaと、aディレクトリがヒットrm -rfし、で最近のファイルが消去されますb
roaima

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/null私のために働く
roaima
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.