$HOME 中的 tmp 目录,其行为类似于 /tmp

$HOME 中的 tmp 目录,其行为类似于 /tmp

TL;DR:如何通过以用户身份执行的 bash 命令或仅以 sudo 身份执行一次的 bash 命令在 $HOME 中设置具有与全局/tmp目录相同行为的临时目录?

/tmp将我的系统升级到 ubuntu 20.04 后,我偶然发现了与临时目录、snap 和 chromium相关的问题。

我编写了一个小型 bash 脚本,将一些日志文件转换为 html 文件,然后在 chromium 中打开。之所以存储 html 文件,是/tmp因为它们很大,而且很可能在不久的将来/下次重启后我不再需要它们。在 ubuntu 18.04 上一切运行良好。

我最近将系统升级到了 ubuntu 20.04,其中 chromium 是通过 snap 安装的,但/tmp由于某些我无法理解的原因,我无法访问 。无论如何,我必须接受这种行为(似乎短期内不会有什么变化)并且必须想办法解决。在 WWW 上搜索时,我偶然发现了存储在 中的用户特定临时目录的想法$HOME,这可以解决我所有的问题,因为 chromium/snap 可以访问$HOME。但是,我不想花太多心思自己创建和清理这个 tmp 目录。我希望有一种方法可以轻松创建一个$HOME/tmp目录,并以与 相同的方式清理它/tmp

我已经阅读了关于 pam_tmpdir 的信息,但不知道这是否有用以及如何有用。我知道,mktemp但如果没有在 中创建,这些文件在重新启动时不会被清理/tmp。我考虑在 中创建文件,/tmp/snap.chromium/tmp因为 chromium 似乎可以访问它,但用户却不能,而且文件夹只在 chromium 第一次启动时创建,这太晚了。在 crontab 中创建一个条目@reboot是一个选项,但我不喜欢它。如果我没记错的话,/tmp清理可以更改,以便清理不仅在重新启动时执行。

希望读到这篇文章的人能够想出解决我的问题的好主意。

答案1

我放了一个名为的/etc/profile.d/tmp-user.sh脚本

if [ "$EUID" -ne 0 ]; then
    if [[ ! ( -d /home/$USER/tmp ) ]]; then
        if [[ ! ( -d /tmp/tmp_$USER ) ]]; then
            mkdir /tmp/tmp_$USER
        fi
        ln -sv /tmp/tmp_$USER /home/$USER/tmp
    fi
    export TMPDIR=/home/$USER/tmp/
fi

它不需要 root 访问权限来启动,因此我们可以将其包含在我们的~/.bash_profile实例中。

相关内容