断电时删除文件

断电时删除文件

我使用的是 Ubuntu 22.04LTS。我想创建一个文件夹“temp”,在我的会话期间,我会将文件保存在这个文件夹中,顾名思义,这些文件是临时的。我如何定义一个脚本,在关机时自动删除此文件夹的内容?

例如:我下载了一些完成某些任务所需的文档,但最终我不需要保留它们,从而避免积累无用的文件。

答案1

方案 01:(有关替代方案 01 的缺点,请参阅替代方案 02 或@Raffa 的评论。)

让我们创建临时目录,并以普通用户身份拥有它,以便我们可以以普通用户身份写入它:

sudo mkdir /my_temp_files/
sudo chown $USER:$USER /my_temp_files/

让我们编写一个脚本来删除系统启动时的临时文件。我们将脚本存储在以下目录中:

sudo mkdir -p /opt/remove_my_temp_files/bin/

创建一个名为的文件remove_my_temp_files.sh

sudo touch /opt/remove_my_temp_files/bin/remove_my_temp_files.sh
sudo chmod 755 /opt/remove_my_temp_files/bin/remove_my_temp_files.sh
sudo chown root:root /opt/remove_my_temp_files/bin/remove_my_temp_files.sh

将以下内容写入此文件:

#!/bin/bash

if [[ -d /my_temp_files ]] ; then
  rm -fr /my_temp_files/*
  rm -fr /my_temp_files/.*
fi

现在,创建一个名为remove_my_temp_files.service

sudo touch /etc/systemd/system/remove_my_temp_files.service
sudo chmod 644 /etc/systemd/system/remove_my_temp_files.service
sudo chown root:root /etc/systemd/system/remove_my_temp_files.service

并将以下内容写入此文件:

[Unit]
Description=Removes My Temporary Files.

[Service]
Type=oneshot
ExecStart=-/bin/bash -c '/opt/remove_my_temp_files/bin/remove_my_temp_files.sh'

[Install]
WantedBy=multi-user.target

现在,最终启用remove_my_temp_files.service

sudo systemctl enable remove_my_temp_files.service

/my_temp_files/现在,每次系统启动时,此目录中创建的文件和目录都会被删除。

替代方案02:

正如@Raffa在下面的评论中所建议的那样,我的方式rm /path/to/dir/*受到允许的命令行大小的限制,并且使用系统服务对于可以按照crontab他的建议简单完成的任务来说有点太多了,这里是替代答案:

在 中写入以下代码$HOME/bin/remove_user_temp.sh

#!/bin/bash

declare MY_TEMP_DIR="$HOME/my_temp_dir/"

if [[ -e "$MY_TEMP_DIR" ]] ; then
  rm -rf "$MY_TEMP_DIR"
  if [[ ! -e "$MY_TEMP_DIR" ]] ; then
    mkdir "$MY_TEMP_DIR"
  fi
fi

使该脚本可执行:

chmod +x $HOME/bin/remove_user_temp.sh

编辑crontab如下:

crontab -e

如果允许,选择所需的文件编辑器,然后开始编辑 cron 作业。在文件末尾添加:

@reboot $HOME/bin/remove_user_temp.sh

保存编辑并退出 crontab。这也将在系统重启时删除临时目录中的文件。

方案 03:

最简单的替代方法是将临时文件放在/tmp//dev/shm/目录中。存储在中的文件/tmp将在下次系统启动时被删除,而/dev/shm存储在计算机内存中的文件(而不是磁盘上的文件)将在计算机关闭或重新启动时被删除。

答案2

有一种方法可以内置于Linux,称为 tmpfs,可以实现这一点。要使用它,请创建一个文件夹 tmpfs,当您创建该文件夹后,文件夹中的所有内容都会在它不再是 tmpfs 或计算机关闭时消失。缺点是 tmpfs 文件夹中的文件只能驻留在 RAM 或交换中。

# mount -t tmpfs tmpfs temp

文件系统不会存储文件夹是否为 tmpfs。要将文件夹永久标记为 tmpfs,您应该编辑/etc/fstab

tmpfs   /tmp    tmpfs   defaults        0       2

除了 tmpfs,Ubuntu 的服务还会/tmp在启动时自动清理目录(感谢 raj),因此您可以将任何临时文件放在那里。

答案3

这是 @rusty 答案的一个更简单的版本。我将使用官方的 systemd-tmpfiles 机制。请注意,就像那个答案一样,我的答案是在开机时而不是关机时删除内容。只需将以下内容粘贴到/etc/tmpfiles.d/my-temp-files-1503475-1004020.conf

D /my_temp_dir 0755 root root

如果需要,请更改root$USER。对于仅限用户的替代方案,您可以使用~/.config/user-tmpfiles.d/after systemctl --user enable systemd-tmpfiles-setup。这将使用 systemd-tmpfiles,例如@muru 的回答但它systemd-tmpfiles-setup不使用。对于这样一项基本任务,systemd-tmpfiles-clean无需混合使用 bash 脚本来/opt安装enable和运行 .services、手动、、、rm或cron。chmodchown/opt

相关内容