如何创建具有“正常”权限的临时文件?

如何创建具有“正常”权限的临时文件?

在构建脚本中,我想创建一个具有唯一生成名称的临时文件,然后向其中写入一些数据,然后将该文件重命名为其最终名称(此过程的原因是我希望重命名发生(主要是)原子)。

但如果我使用mktemp,新文件将具有非常严格的权限:

文件创建为 u+rw,目录创建为 u+rwx,减去 umask 限制。

...并且当文件重命名时,这些权限将被保留。但是,我希望生成的文件具有“正常”权限;也就是说,它应该与touchshell 重定向创建的文件具有相同的权限。

实现这一目标的推荐方法是什么?是否有一个(常见的)替代方案mktemp;或者是否有一种简单可靠的方法可以将文件权限更改为正常umask权限?

答案1

chmod =rw "$file"创建临时文件后即可使用。这GNU 手册页说:

字母组合ugoa控制将更改哪些用户对文件的访问权限: [...] 如果未给出其中任何一个,则效果就像给出了 (a),但未给出 umask 中设置的位做作的。

因此,=rw给出通过 umask 减少的读写权限,类似于0666作为权限参数传递给open(),这就是 egtouch filename或 的echo > filename作用。

那是一个POSIX 功能,因此其他实现也应该支持它。

答案2

使用此链接获取您想要的权限http://permissions-calculator.org/

手动的

创建一个脚本文件,该文件创建一个新文件,然后更改其权限。

#!/bin/bash

Filename=$1
Perms=$2

#Create a temp file
touch $Filename

#Change the file's permissions (Use your own desired permissions)
chmod $Perms $Filename

使脚本可执行后chmod +x myscript.sh,像这样执行脚本文件./myscript.sh tempfile 600

使用 Umask(不推荐)

umask 600您可以使用例如临时更改默认文件权限。

要永久更改默认文件权限,请编辑用户根目录中的 .bashrc 文件。

nano ~/.bashrc

添加umask 600到文件底部。当然,请确保符合您所需的权限。确保您也编辑了正确的用户。

如果这是用于构建脚本,我将使用手动方法而不是依赖 umask。特别是如果您的构建脚本将在不同的系统上使用。

相关内容