Поиск по сайту:

Удалите файлы, к которым не было доступа в течение определенного времени в Linux

Мы уже рассмотрели, как вручную находить и удалять файлы старше X дней с помощью команды «find» в Linux. Сегодня мы сделаем то же самое, но только в том случае, если к файлам не было доступа в течение определенного периода времени. Встречайте Tmpwatch — утилиту командной строки, позволяющую рекурсивно удалять файлы, к которым не было доступа в течение определенного времени. Не только файлы, tmpwatch также удалит пустые каталоги.

По умолчанию Tmpwatch решит, какие файлы/каталоги следует удалить, основываясь на их atime (времени доступа). Конечно, вы можете изменить это поведение, используя ctime (время изменения индексного дескриптора), mtime (время изменения ) значения тоже. Обычно Tmpwatch можно использовать для удаления содержимого каталога /tmp и других неиспользуемых и нежелательных материалов, таких как старые файлы журналов.

Важное предупреждение!

Прежде чем начать использовать этот инструмент, вы должны знать, что Tmpwatch будет рекурсивно удалять файлы и каталоги на основе заданных критериев. Не запускайте tmpwatch в/(корневом каталоге). Этот каталог содержит важные файлы, необходимые для поддержания работоспособности системы Linux. Если вы не будете достаточно осторожны, tmpwatch удалит важные системные файлы и каталоги, соответствующие заданным критериям, во всем корневом каталоге. В инструмент Tmpwatch не встроен механизм защиты, предотвращающий его запуск в корневом каталоге. Таким образом, отменить операцию невозможно. Вы были предупреждены!

Установите Tmpwatch в Linux

Tmpwatch доступен в репозиториях по умолчанию большинства дистрибутивов Linux.

В Fedora, CentOS, RHEL, AlmaLinux и Rocky Linux вы можете установить его с помощью команды:

sudo dnf install tmpwatch

В openSUSE:

sudo zypper install tmpwatch

В Debian и его производных, таких как Ubuntu, Tmpwatch доступен под другим именем, например, Tmpreaper. Tmpreaper в основном основан на tmpwatch-1.2/1.4, созданном Эриком Троаном из Redhat. Сейчас tmpreaper для Debian поддерживается Полом Слоотманом.

Чтобы установить tmpreaper в Debian, Ubuntu, Linux Mint, запустите:

sudo apt install tmpreaper

Чтобы запустить его, запустите:

tmpreaper <options>

Или введите полный путь:

/usr/sbin/tmpreaper <options>

Удалите файлы, к которым не было доступа в течение определенного времени, с помощью Tmpwatch/Tmpreaper

Использование Tmpwatch и Tmpreaper практически одинаково. Если вы используете системы на базе Debian, замените «Tmpwatch» на «Tmpreaper» в следующих примерах.

Удалить файлы, к которым не обращались более X дней.

Чтобы удалить файлы старше 10 дней, выполните:

tmpwatch 10d /var/log/

Приведенная выше команда удалит все файлы и пустые каталоги, к которым не было доступа более 10 дней, из папки /var/log/.

Удалить файлы, которые не изменялись более X дней.

Как я уже говорил, Tmpwatch будет удалять файлы в зависимости от времени их доступа. Вы также можете удалять файлы в зависимости от времени их модификации (mtime), используя опцию -m.

Например, следующая команда удалит файлы, которые не изменялись в течение 10 дней, в папке /var/log/.

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 в важном каталоге. Если да, запустите Tmpwatch в тестовом режиме с опцией -t.

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 будет запускаться каждый день в час ночи и удалять файлы старше 30 дней.

Более подробную информацию о настройке заданий cron можно найти по следующей ссылке.

  • Руководство по заданиям Cron для начинающих

Еще раз: пожалуйста, будьте осторожны при использовании команд Tmpwatch/Tmpreaper. Дважды проверьте путь перед его запуском, чтобы избежать потери данных.

Более подробную информацию можно найти на страницах руководства.

man tmpwatch

Или,

man tmpreaper

Связанное чтение:

  • Autotrash — инструмент CLI для автоматической очистки старых удаленных файлов
  • Trash-cli: мусорная корзина командной строки для Unix-подобных систем
  • Найти и удалить самый старый файл, если в каталоге более X файлов
  • Как найти и удалить неиспользуемые пакеты в Linux
  • Как очистить ненужные файлы в Ubuntu с помощью Ubuntu Cleaner

Статьи по данной тематике