2010-03-12 145 views
21

我总是听说在UNIX机器上找到临时文件夹的正确方法是查看TMP环境变量。当编写在Windows和Linux上工作的代码时,我会检查TEMP和TMP。TMP环境变量发生了什么变化?

今天,我发现我的Ubuntu安装根本没有那个环境变量。

我知道你总是可以依靠/ tmp来存放你的临时文件,但我知道TMP是用户可以告诉你把临时文件放在其他地方的方式。

那还是这样吗?

+2

这是如何过于本地化?我敢肯定,不止一些人在Linux中使用临时文件。 – Cascabel 2010-03-12 19:09:07

回答

12

您可能正在考虑TMPDIR

该变量代表一个目录的路径名,该目录可用于需要创建临时文件的程序的程序。

+6

我的默认安装的Ubuntu LTS Server 12.04和14.04没有任何关于临时目录的环境变量,既不是TMPDIR也不是TMP或TEMP,即使在某些地方记录了TMPDIR也是如此。最后,这个变量似乎不再可靠(已经)。 – 2016-03-21 14:08:20

+0

使用后备:'TMPDIR =“{$ {TMPDIR: - $(dirname $(mktemp))/}”' – Deilan 2017-07-18 13:21:20

8

POSIX/FHS表示/tmp是临时文件的根目录,尽管有些程序可能会选择检查$TEMP$TMP

+0

http://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES – 2010-03-12 19:12:33

9

创建临时目录的好方法是使用mktemp,例如,

mktemp -d -t 

这样,您甚至可以确保您的文件名不会与现有文件发生冲突。

+2

这是一个很好的答案,但它不是对上述问题的回答。 – 2013-07-17 07:11:48

1
全局变量命令。
# prompt> 
printenv | sort 
$ TMP是不是 声明(d)
# So, prompt> (i.e. if [ -d /tmp ] is true) 
export TMP="/tmp" 

export?为了将变量传递给子shell。
另外,使用$ TMPDIR如果设置,这是Linux的正确var名称。是的,我使用/ tmp目录;至少在重启后文件将被删除。

2

什么@克里斯Lercher说,类似的,我觉得这对我的作品:

dirname $(mktemp -u -t tmp.XXXXXXXXXX) 

这实际上并不会创建一个临时文件(因为-u标志,mktemp的),但它会为您提供临时文件将被写入的目录。这段代码适用于OSX和Ubuntu(也可能是其他* nix)。

如果你想将它设置成一个变量,做这样的事情:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)` 
+2

或简单地说:'dirname $(mktemp -u)'。 – ekhumoro 2016-12-28 20:40:38

0

仅供参考 - Ubuntu的(我假设其他systemd基于发行版),并定义XDG_RUNTIME_DIR变量 - 这是每个用户临时空间,所以很少不仅仅是/ tmp目录更安全:

$回声$ XDG_RUNTIME_DIR /运行/用户/ 1000

$ LS -ld $ XDG_RUNTIME_DIR drwx ------ 2 Ubuntu的Ubuntu的40月22 15:18/run/user/1000

我认为XDG_RUNTIME_DIR是由systemd/pam维护的,因此它不会在Dockers或其他非systemd环境中设置为 。

你可以做这样的事情在〜/ .bashrc如果你喜欢:

出口TEMP = “$ {XDG_RUNTIME_DIR: -/tmp目录}”

参见: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html https://www.freedesktop.org/wiki/

另外 - 在我看来有一些与XDG_RUNTIME_DIR和sudo的警告: https://unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user