[Linux] Using mktemp Command is Safe for Creating tmp Files
In Linux, if you want to create tmp files under the /tmp directory, using the mktemp command allows you to create files safely.
After mktemp, specify any filename + three or more “X”s, and the parts where you specified “X” will be replaced with appropriate character strings.
$ mktemp /tmp/XXXXXX
/tmp/DCz1yP
By the way, mktemp can work without arguments, but since TMPDIR might be a directory other than /tmp depending on the distribution or macOS, it’s safer to specify the directory.
When filenames are fixed, executing the same command overwrites the same file, making content consistency unreliable. So it’s fairly common practice to create a temporary file and then use mv (last one wins) or ln (first one wins).
TMPFILE=`mktemp`
some processing > "$TMPFILE"
mv "$TMPFILE" needed_file
TMPFILE=`mktemp`
ln "$TMPFILE" needed_file_fixed
some processing > needed_file
When you run mktemp /tmp/XXXXXX.csv on macOS, it creates a file called XXXXXX.tsv, but when run on Amazon Linux:
[ec2-user@aws ~]$ mktemp /tmp/XXXXXX.csv
/tmp/DCz1yP.csv
A random filename is assigned like this. I tried it on macOS and thought “what’s this?”
On Unix-type OSes, suffixes don’t matter much, so mktemp /tmp/XXXXXX is pretty normal. On Mac OS X, using GNU coreutils’ gmktemp gives the same behavior as Linux.
$ brew install coreutils
$ gmktemp /tmp/XXXXX.csv
/tmp/cdWSV.csv
That’s all from the Gemba, where I want to safely create tmp files with the mktemp command.
That’s all from the Gemba.