go新建文件权限与设置不符
2017-01-12 00:00
309 查看
一. 问题
fileName := "/Users/my/tests/perm_file" f, _ := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) //代码 f.Close()
上述代码是打开一个文件,如果文件不存在则创建一个新文件,同时权限设置为0666(-rw-rw-rw-),但实际生成的文件权限可能与你认为的不一致:
bogon:tests didi$ ll perm_file -rw-r--r-- 1 my staff 0 1 12 16:06 perm_file
这个跟umask值相关,下面说明下umask
功能说明:指定在建立文件时预设的权限掩码。
语 法:umask [-S][权限掩码]
补充说明:umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
参 数:
-S 以文字的方式来表示权限掩码。
文件:用八进制基数666,即无x位(可执行位)rw- rw- rw-.执行位需由用户自行加入。
umask就是系统的一个安全机制,通过设置不同的权限,可以达到限制用户操作的目的,有效地保证了文件的完整性。
接着说上面的例子
需要的权限是-rw-rw-rw-,但实际生成的文件权限是-rw-r--r--,用户组和其他用户的w权限被去掉了,查看下系统的umask值
bogon:tests my$ umask 0022
umask值是0022,r是4,w是2,x是1,对应如下
|说明|所属用户|所属用户组|其他用户|
|:---|:---:|:---:|:---:|
|需要的|-rw-|rw-|rw-|
|减去umask|0|2(w)|2(w)|
|得到|-rw-|r--|r--|
二. 解决方法
1.设定umask值
syscall.Umask(0)
2.通过chmod重新赋权限
os.Chmod(fileName, 0666)
相关文章推荐
- go新建文件权限与设置不符
- umask命令_Linux umask 命令用法详解:用来设置限制新建文件权限的掩码
- Linux使用笔记: 设置Samba服务器中新建文件/目录的权限
- 设置Samba服务器中新建文件/目录的权限
- Linux使用笔记: 设置Samba服务器中新建文件/目录的权限
- 设置Samba服务器中新建文件/目录的权限
- 利用NTFS分区的文件权限设置防止access数据库被下载
- WEB日志文件相关的文件权限设置
- Linux文件权限的设置技巧
- .net 对文件设置权限的代码
- 在win2000局域网中如何设置权限,可使文件不被删除但又可保存并能更改
- Linux操作系统文件权限设置方法详细讲解
- 移动文件如何保留原有的权限设置
- 如何对共享文件访问者的权限进行设置
- Access 数据库文件的 NTFS 权限设置
- 在命令行里设置文件权限
- 使用Cacls命令设置服务器文件访问权限
- 通过试验探索Access 2000/XP 数据库的最佳 NTFS 权限设置Microsoft Jet 数据库引擎打不开文件'D:\wwwroot\test\data\'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。
- DOS下设置文件权限
- linux设置目录和文件使用权限