谈谈umask
文章目录
今天做 POC(Proof of Concept)
的时候,遇到了一个小问题——使用 golang 标准库的 os.Mkdir(name string, perm FileMode)
创建得到的文件夹的文件权限和 perm
权限设置的不一样。为什么会这样呢?那就得要谈谈**文件权限掩码 (umask)**了。
用户在 linux 系统中创建一个文件的默认权限是由两部分决定的——基本码和文件权限掩码 (umask)。文件夹的基本码是 rwxrwxrwx(777),文件的基本码是 rw-rw-rw- (666)。默认情况下 umask
值是022,这时建立的文件夹的默认权限是755(7-0, 7-2, 7-2),建立的文件的默认权限是644 (6-0, 6-2, 6-2)。通过 umask
命令可以查看/修改当前系统的文件权限掩码 (umask)。
那么,有没有办法在创建文件夹的时候忽略掉 umask
吗?当然有,以 mkdir
命令为例:使用 man mkdir
查看帮助能看到 mkdir
有个 -m 参数可以直接设置文件夹的最终权限,从而避开 umask
。
说到这里,让我们回头看看最开始说的小问题。显然,我们可以通过 os.Exec
函数执行带有 -m 参数的 mkdir
命令来达到目标。不过,我这里还有另外一个方法来解决这个问题。创建文件夹时设置 umask
为 000,之后改回原来的 umask
。代码如下:
文章作者 疯魔慕薇
上次更新 2017-11-16