原文:https://blog.csdn.net/lipengfeihb/article/details/54415283

一. 问题

fileName := "/Users/my/tests/perm_file"
f, _ := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, )
//代码
f.Close()

上述代码是打开一个文件,如果文件不存在则创建一个新文件,同时权限设置为0666(-rw-rw-rw-),但实际生成的文件权限可能与你认为的不一致:

bogon:tests didi$ ll perm_file
-rw-r--r-- my staff : 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

bogon:tests my$ umask

umask值是0022,r是4,w是2,x是1,对应如下

说明 所属用户 所属用户组 其他用户
需要的 -rw- rw- rw-
减去umask 0 2(w) 2(w)
得到 -rw- r– r–
二. 解决方法
1.设定umask值

syscall.Umask()

2.通过chmod重新赋权限

os.Chmod(fileName, )

最新文章

  1. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
  2. OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU
  3. 关于openssl几个API的一点小收获
  4. xss如何加载远程js的一些tips
  5. window.event对象详尽解析
  6. Lambda 表达式的基本形式
  7. kuangbin_ShortPath F (POJ 3259)
  8. css选择器nth-child()和nth-of-type()的应用
  9. C语言学习总结(三) 复杂类型
  10. (转)union和union all的区别
  11. JAVA事件监听机制学习
  12. storyboard页面跳转传值
  13. Python中的可变对象和不可变对象
  14. 图片懒加载Demo
  15. 第二章 JavaScript核心语法
  16. 人工智能-调百度AI接口+图灵机器人
  17. laravel seed填充数据步骤
  18. js中字符替换函数String.replace()使用技巧
  19. 10.翻译系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
  20. Java日志框架(Commons-logging,SLF4j,Log4j,Logback)

热门文章

  1. vue bus.js 使用方法
  2. 2016/10/13 Oracle COALESCE()
  3. 【转载】img图片之间的间距问题
  4. aspnet boilerplate 随笔一
  5. 不加班的秘诀:如何通过AOE快速集成NCNN?
  6. js new Date 创建时间默认是8点
  7. C++之new关键字
  8. ReactNative: 使用对话框组件AlertIOS组件
  9. asp.net core web应用以服务的方式安装运行
  10. Spring基础——AOP通知