欢迎访问个人网络日志知行空间
Linux Shell
创建临时文件Linux
的/tmp
目录用来存放不需要永久保留的文件。大多数Linux
发行版配置了系统在启动时自动清空/tmp
目录的功能。系统上的任何用户账户都有权限读写/tmp
目录中的文件。这为用户提供了一种创建临时文件的简单方法。
mktemp
命令可以用来创建临时文件,并保证创建文件名的唯一性。它会将文件的读和写权限分配给文件的属主,并将文件创建者设置成文件的属主。
默认情况下, mktemp
会在工作目录中创建一个文件。mktemp
创建文件需要用户提供一个文件名模板,这个文件名模板可以包含任意文本文件名,只需要在文件名末尾加上6个大写的X
就行了,系统会自动替换6个XXXXXX
,生成唯一的标识名。
$ mktemp test_XXXXXX
# test_dtDrji
$ mktemp test_XXXXXX
# test_5AHGek
$ mktemp test_XXXXXX
# test_qRaG25
从上面的例子可以看到mktemp
命令的输出正是它所创建的文件的名字,在脚本中使用 mktemp
命令时,可能要将文件名保存到变量中,这样就能在后面的脚本中引用了。
#!/bin/bash
tempfile=$(mktemp test_XXXXXX)
exec 3>$tempfile
echo "This script writes to temp file $tempfile"
echo "line1" >&3
echo "line2" >&3
echo "line3" >&3
exec 3>&-
echo "Done creating temp file. The contents are:"
cat $tempfile
rm -f $tempfile 2> /dev/null
这样,就会用 mktemp
命令来创建临时文件并将文件名赋给 $tempfile
变量。rm -f $tempfile 2> /dev/null
是吃掉rm
命令的报错信息,不将其打印到显示器上。
/tmp
目录创建临时文件mktemp
命令支持很多选项,其中-t
选项会强制mktemp
命令来在系统的临时目录\tmp
中来创建该文件。
$ mktemp -t test_XXXXXX
# /tmp/test_N5I2D2
$ mktemp -t test_XXXXXX
# /tmp/test_1Iw2YW
正如上面的例子,mktemp -t
命令返回了创建文件的全路径名,而不仅仅是文件名。如此,可以在Linux系统上的任何目录下引用该临时文件。
#!/bin/bash
tempfile=$(mktemp -t tmp.XXXXXX)
exec 3>$tempfile
echo "line1" >&3
echo "line2" >&3
echo "The temp file is located at: $tempfile"
cat $tempfile
rm -f $tempfile
执行,
$ ./test.sh
# The temp file is located at: /tmp/tmp.vETsgK
# line1
# line2
可以看到输出是被重定向到了tempfile
文件中了。
mktemp
命令的-d
选项用来创建一个临时路径。
$ mktemp -d test_XXXXXX
# test_rNaqHB
$ mktemp -dt test_XXXXXX
# /tmp/test_ntyfp9
结合这个选项,可以在当前目录中创建目录,然后用 cd
命令进入创建的目录,在其中创建临时文件。通过分配文件描述符,用来存储脚本的输出。
欢迎访问个人网络日志知行空间