粉碎 tmpfiles.d 中的文件

粉碎 tmpfiles.d 中的文件

搜索 tmpfiles.d 后,似乎删除文件/目录的选项数量有限。我想用类似 shred 的命令完全删除临时目录,有没有办法在 tmpfiles.d 配置中触发脚本或一些隐藏机制在 tmp 清理期间使用 shred。

答案1

是的!调用systemd-tmpfiles --remove以删除配置有 或 的目录的所有内容D以及R配置有r或 的所有文件或目录R

man systemd-tmpfiles

   --remove
       If this option is passed, the contents of directories marked with D or R,
       and files or directories themselves marked with r or R are removed.

为了稍微减少侵入性,您可以将其过滤为仅以前缀开头的目录:

   --prefix=path
       Only apply rules with paths that start with the specified prefix. This option
       can be specified multiple times.

   --exclude-prefix=path
       Ignore rules with paths that start with the specified prefix. This option
       can be specified multiple times.

或者你可以更频繁地清洁。 --clean只会删除已过期(年龄已过)的临时文件。在以下示例中,运行systemd-tmpfiles --clean将删除/run/screens早于 的所有内容10d

# /usr/lib/tmpfiles.d/screen.conf
# Type  Path           Mode   User   Group    Age    Argument
  d     /run/screens   1777   root   screen   10d    -

请注意,这已经由以下人员每天检查一次systemd-tmpfiles-clean.timer

$ systemctl cat systemd-tmpfiles-clean.{timer,service}
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

# /lib/systemd/system/systemd-tmpfiles-clean.service
[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-set.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=systemd-tmpfiles --clean
SuccessExitStatus=DATAERR
IOSchedulingClass=idle

如果这对您来说还不够激进,您可以:

d /my/path 0755 user group  1h -

OnUnitActiveSec=1h并创建一个计时器的插入项。

或者,如果您正在运行服务,请查看 中的沙箱选项man systemd.exec。像PrivateTmp=RemoveIPC=和 之类的东西DynamicUser=确实可以在不再需要时立即删除它们。

相关内容