Does Linux have a standard temporary directory for general use, like Windows's
C:\Temp folder? If so, where is it located? I found an SO question about finding a
tmp directory programmatically, but I want to set a temp location in an XML config file ahead of time.
The Filesystem Hierarchy Standard version 3.0 says:
/tmpdirectory must be made available for programs that require temporary files.
Programs must not assume that any files or directories in
/tmpare preserved between invocations of the program.
IEEE standard POSIX.1-2008 lists requirements similar to the above section. Although data stored in
/tmpmay be deleted in a site-specific manner, it is recommended that files and directories located in
/tmpbe deleted whenever the system is booted.
FHS added this recommendation on the basis of historical precedent and common practice, but did not make it a requirement because system administration is not within the scope of this standard.
/var/tmpdirectory is made available for programs that require temporary files or directories that are preserved between system reboots. Therefore, data stored in
/var/tmpis more persistent than data in
Files and directories located in
/var/tmpmust not be deleted when the system is booted. Although data stored in
/var/tmpis typically deleted in a site-specific manner, it is recommended that deletions occur at a less frequent interval than
Also the The Open Group Base Specifications Issue 7, Environment Variables mentions the following:
TMPDIRThis variable shall represent a pathname of a directory made available for programs that need a place to create temporary files.
This is an old question so today there is another option available. Linux distributions relying on
systemd (which is 90% of them) can now use
$XDG_RUNTIME_DIR directory (XDG Base Directory Specification) to store certain types of temporary files. It is generally located at
/run/user/$uid. This is a per-user directory with
700 permissions which provides better security. This is a
tmpfs mount which provides performance. The downside of
tmpfs is that it should only be used to keep small files and sockets.
I look at it as a marriage of
You cannot choose a single temporary directory name ahead of time that will work for any Linux system. In fact, you can't do that on Windows either. According to Wikipedia's article on temporary folders, the temporary directory on Windows is determined by the environment variable TEMP. If you were simply using
c:\Temp as a temporary directory on a Windows system that set TEMP to something else, then any program using your XML file to choose a temporary directory would fail.
In short, the system temporary directory is determined by the environment on all modern operating systems that I know of, including both Windows and any UNIX-like system. Setting a single static path as your temporary directory will only work as long as the defaults have not been changed.
Anyway, the standard temporary directory in a typical Linux system is
/tmp. It is the equivalent of
C:\Temp in the sense that it is only the default temporary directory, not universal. Even if
/tmp is available, if a user (or the system) has set the TEMP environment variable, the value of that variable should be used instead.
You could try choosing a temporary directory relative to the user's home directory, which you can create.