GNU/Linux >> Linux の 問題 >  >> Linux

Linuxで一定時間アクセスされていないファイルを削除する

Linuxで「find」コマンドを使用してX日より古いファイルを手動で検索および削除する方法については、すでに説明しました。 。今日は同じことを行いますが、ファイルが一定期間アクセスされていない場合に限ります。 「Tmpwatch」に挨拶します 、特定の時間アクセスされていないファイルを再帰的に削除するコマンドラインユーティリティ。ファイルだけでなく、tmpwatchは空のディレクトリも削除します。

デフォルトでは、Tmpwatchは、 atimeに基づいて、削除するファイル/ディレクトリを決定します。 (アクセス時間)。もちろん、 ctimeを使用して、この動作を変更できます。 (iノード変更時間)、 mtime (変更時間)値も同様です。通常、Tmpwatchを使用して /tmpのコンテンツを削除できます ディレクトリや、古いログファイルなどの未使用の不要なもの。

重要な警告!!

このツールの使用を開始する前に、Tmpwatchが指定された基準に基づいてファイルとディレクトリを再帰的に削除することを知っておく必要があります。 /(ルートディレクトリ)でtmpwatchを実行しないでください 。このディレクトリには、Linuxシステムの実行を維持するために必要な重要なファイルが含まれています。注意が不十分な場合、tmpwatchは、ルートディレクトリ全体で指定された基準に一致する重要なシステムファイルとディレクトリを削除します。ルートディレクトリで実行できないようにするためのセーフガードメカニズムはTmpwatchツールに組み込まれていません。そのため、操作を元に戻す方法はありません。警告されました!

LinuxにTmpwatchをインストールする

Tmpwatchは、ほとんどのLinuxディストリビューションのデフォルトのリポジトリで利用できます。

Fedora、CentOS、RHEL、AlmaLinux、およびRocky Linuxでは、次のコマンドを使用してインストールできます:

$ sudo dnf install tmpwatch

openSUSEの場合:

$ sudo zypper install tmpwatch

DebianおよびUbuntuなどのその派生物では、Tmpwatchは別の名前で利用できます。つまり Tmpreaper 。 Tmpreaperは、主に Eric Troanによる`tmpwatch-1.2/1.4'に基づいています。 Redhatから。現在、tmpreaperは Paul SlootmanによってDebian用に保守されています。 。

Debian、Ubuntu、Linux Mintにtmpreaperをインストールするには、次のコマンドを実行します。

$ sudo apt install tmpreaper

起動するには、次を実行します:

$ tmpreaper <options>

または、フルパスを入力してください:

$ /usr/sbin/tmpreaper <options>

Tmpwatch/Tmpreaperを使用して一定時間アクセスされていないファイルを削除する

TmpwatchとTmpreaperの使用法はほぼ同じです。 Debianベースのシステムを使用している場合は、次の例で「Tmpwatch」を「Tmpreaper」に置き換えてください。

X日を超えてアクセスされていないファイルを削除する

10日以上経過したファイルを削除するには、次のコマンドを実行します。

tmpwatch 10d /var/log/

上記のコマンドは、 /var/log/から10日以上アクセスされていないすべてのファイルと空のディレクトリを削除します フォルダ。

X日を超えて変更されていないファイルを削除する

すでに述べたように、Tmpwatchはアクセス時間に基づいてファイルを削除します。 -mを使用して、変更時間(mtime)に基づいてファイルを削除することもできます。 オプション。

たとえば、次のコマンドは、/var/log/で10日間変更されていないファイルを削除します フォルダ。

tmpwatch -m 10d /var/log/

ここでは、 -m 変更時刻とdを指します です パラメータ。 パラメーターは、ファイルを削除するための経過時間のしきい値を定義します。次のtime_specパラメータを使用してファイルを削除できます。

  • d -何日も
  • h -何時間も
  • m -数分間
  • s -数秒間。

時間 デフォルトです。

たとえば、過去10時間に変更されていないファイルを削除するには 、単に実行します:

tmpwatch -m 10 /var/log/

お気づきかもしれませんが、上記のコマンドではtime_specパラメーターを使用していません。なぜなら、 h (時間)はデフォルトのパラメータであるため、過去X時間変更されていないファイルを削除するときに言及する必要はありません。

シンボリックリンクの削除

通常のファイルやディレクトリだけでなく、シンボリックリンクを削除する場合は、 -sを使用します。 以下のようなオプション。

tmpwatch -s 10 /var/log/

すべてのファイルを削除

通常のファイル、シンボリックリンク、ディレクトリだけでなく、すべてのファイルタイプを削除するには、 -aを使用します。 オプション。

tmpwatch -a 10 /var/log/

上記のコマンドは、/var/log/内の通常のファイル、シンボリックリンク、ディレクトリを含むすべての種類のファイルを削除します。 フォルダ。

ディレクトリを削除から除外する

場合によっては、ファイルは削除したいが、ディレクトリは削除したくない場合があります。その場合、コマンドは次のようになります。

tmpwatch -am 10 --nodirs /var/log/

上記のコマンドは、過去10時間変更されていないディレクトリを除くすべてのファイルを削除します。

実際には何も削除せずにテスト実行を実行します

実際に削除されるファイルを確認したい場合があります。これは、重要なディレクトリでTmpwatchを実行するときに役立ちます。その場合は、 -tを使用してテストモードでTmpwatchを実行します オプション。

tmpwatch -t 30 /var/log/

CentOS 7サーバーからの出力例:

removing file /var/log/wtmp
removing directory /var/log/ppp if empty
removing directory /var/log/tuned if empty
removing directory /var/log/anaconda if empty
removing file /var/log/dmesg.old
removing file /var/log/boot.log
removing file /var/log/dnf.librepo.log

Debianベースのシステムでは、次のような出力が表示されます。

$ tmpreaper -t 30 /var/log/
(PID 1803) Pretending to clean up directory `/var/log/'.
(PID 1804) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 1804) Back from recursing down `apache2'.
(PID 1804) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 1804) Back from recursing down `dbconfig-common'.
(PID 1804) Pretending to clean up directory `dist-upgrade'.
(PID 1804) Back from recursing down `dist-upgrade'.
(PID 1804) Pretending to clean up directory `lxd'.
(PID 1804) Back from recursing down `lxd'.
Pretending to remove file `/var/log//cloud-init.log'.
(PID 1804) Pretending to clean up directory `landscape'.
Pretending to remove file `landscape/sysinfo.log'.
(PID 1804) Back from recursing down `landscape'.
[...]

これは操作をシミュレートするだけで、実際には何も削除しません。 Tmpwatchは単にドライランを実行し、出力で削除されるファイルを表示します。

ファイルの強制削除

ファイルを強制的に削除する場合は、 -fを使用してください オプション。

tmpwatch -f 10h /var/log/

通常、書き込みアクセス権のない現在のユーザーが所有するファイルは削除されません。 -f オプションでそれらも削除されます。

特定のファイルを削除からスキップ

Tmpreaperには、ファイルの削除をスキップするオプションがあります。これは、特定の種類のファイルを保持し、他のすべてを削除する場合に役立ちます。その場合は、 --protectを使用します オプション。

tmpreaper --protect '*.txt' -t 10h /var/log/

このコマンドは、 .txtを持つすべてのファイルをスキップします 削除からの拡張

出力例:

(PID 2623) Pretending to clean up directory `/var/log/'.
(PID 2624) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 2624) Back from recursing down `apache2'.
(PID 2624) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 2624) Back from recursing down `dbconfig-common'.
(PID 2624) Pretending to clean up directory `dist-upgrade'.
(PID 2624) Back from recursing down `dist-upgrade'.
Pretending to remove empty directory `dist-upgrade'.
Entry matching `--protect' pattern skipped. `ostechnix.txt'
(PID 2624) Pretending to clean up directory `lxd'.

ご覧のとおり、Tmpreaperは*.txtをスキップします 削除からのファイル。

ちなみに、このオプションはTmpwatchでは使用できません。

ファイルを定期的に削除するためのcronジョブの設定

Tmpwatch/Tmpreaperを常に手動で実行したくない場合があります。その場合、cronジョブを設定してクリーンプロセスを自動化できます。

Tmpreaperをインストールする場合 、毎日のcronジョブを作成します( /etc/cron.daily/tmpreaper )。このジョブは、 /etc/timereaper.confからオプションを読み取ります ファイルし、それに応じて行動します。ファイルを開き、必要に応じて値を変更します。デフォルトでは、Tmpreaperは7日前のファイルを削除します。ただし、値 "TMPREAPER_TIME=7d"を変更することで、これを変更できます。 tmpreaper.confファイル内。

「Tmpwatch」を使用する場合は、手動でcronジョブを作成し、その中にcronエントリを配置する必要があります。

# crontab -e

次の行を追加します:

0 1 * * * /usr/sbin/tmpwatch 30d /var/log/

上記のcronジョブに従って、Tmpwatchは毎日午前1時に実行され、30日古いファイルを削除します。

cronジョブの設定の詳細については、次のリンクを参照してください。

  • cronジョブの初心者向けガイド

繰り返しますが、 Tmpwatch/Tmpreaperコマンドを使用するときは注意してください 。データの損失を防ぐために、実行する前にパスを再確認してください。

詳細については、manページを参照してください。

$ man tmpwatch

または、

$ man tmpreaper

関連記事:

  • 自動ゴミ箱–古いゴミ箱のファイルを自動的に削除するCLIツール
  • Trash-cli:Unixライクなシステム用のコマンドラインゴミ箱
  • ディレクトリにX個を超えるファイルがある場合は、最も古いファイルを見つけて削除します
  • Linuxで未使用のパッケージを見つけて削除する方法
  • Ubuntuクリーナーを使用してUbuntuのジャンクファイルをクリーンアップする方法

Linux
  1. 開いているが削除された大きなファイルを見つけて削除しますか?

  2. 指定されたファイル名のファイルが内部にないすべてのディレクトリを一覧表示しますか?

  3. Unix と Linux で今日 (または特定の時間前から) 変更されたファイルを検索する

  1. Linux構成ファイルで構文エラーを確認してください

  2. Linux で特定の期間より古いファイルを見つけて削除する方法

  3. 所有者に特定の権限しかないファイルを見つけるにはどうすればよいですか?

  1. Linux ファイルとディレクトリの削除

  2. Linux で SOCK_SEQPACKET の MSG_EOR が表示されないのはなぜですか?

  3. LinuxのNOTディレクトリのディレクトリ内のファイルのみを削除します