我们已经介绍了如何手动 在 Linux 中使用“find”命令查找和删除超过 X 天的文件. 今天我们将做同样的事情,但前提是文件在一段时间内未被访问。 打招呼 “时间表”,一个命令行实用程序,用于递归删除在给定时间内未访问的文件。 不只是文件,tmpwatch 也会删除空目录。
默认情况下,Tmpwatch 会根据文件/目录决定删除哪些文件/目录 atime
(访问时间)。 当然,您可以通过使用更改此行为 ctime
(inode 更改时间), 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 主要基于 `tmpwatch-1.2/1.4′ by 埃里克·特兰 来自红帽。 现在,tmpreaper 由 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/
上述命令将删除超过 10 天未访问的所有文件和空目录 /var/log/
文件夹。
删除超过 X 天未修改的文件
就像我已经说过的,Tmpwatch 将根据访问时间删除文件。 您还可以使用根据修改时间 (mtime) 删除文件 -m
选项。
例如,下面的命令将删除 10 天内未修改的文件 /var/log/
文件夹。
tmpwatch -m 10d /var/log/
这里, -m
指修改时间和 d
是个 范围。
d
– 持续数天,h
– 用了几个小时,m
– 几分钟,s
– 几秒钟。
小时 是默认值。
例如,删除过去未修改的文件 10个小时,只需运行:
tmpwatch -m 10 /var/log/
您可能已经注意到,我没有在上述命令中使用 time_spec 参数。 因为, H (for hours) 是默认参数,因此我们在删除过去 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 作业来自动执行清理过程。
安装时 转发器, 它将创建一个每日 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 tmpwatch
或者,
$ man tmpreaper
相关阅读:
- Autotrash – 自动清除旧垃圾文件的 CLI 工具
- Trash-cli:类 Unix 系统的命令行垃圾箱
- 如果目录中有超过 X 个文件,则查找并删除最旧的文件
- 如何在 Linux 中查找和删除未使用的软件包
- 如何使用 Ubuntu Cleaner 清理 Ubuntu 中的垃圾文件
CLID删除文件LinuxLinux命令Linux提示TmpreaperTmpwatch