linux 创建目录的权限,创建目录权限 - 理解 Linux 进程

创建目录权限

如果你想创建一个目录并授予777权限,你需要怎么做?查看Go的API文档我们可以这样写。

源文件为mkdir.go。

package main

import (

"fmt"

"os"

)

func main() {

err := os.MkdirAll("/tmp/gotest/", 0777)

if err != nil {

panic(err)

}

fmt.Println("Mkdir /tmp/gotest/")

}

运行结果

➜ understand_linux_process_examples git:(master) ✗ ll /tmp/

drwxr-xr-x 2 tobe wheel 68B Dec 30 10:06 gotest

➜ understand_linux_process_examples git:(master) ✗ umask

022

正确做法

代码在mkdir_umask.go中。

package main

import (

"fmt"

"os"

"syscall"

)

func main() {

mask := syscall.Umask(0)

defer syscall.Umask(mask)

err := os.MkdirAll("/tmp/gotest/", 0777)

if err != nil {

panic(err)

}

fmt.Println("Mkdir /tmp/gotest/")

}

注意事项

这并不是Go的Bug,包括Linux系统调用都是这样的,创建目录除了给定的权限还要加上系统的Umask,Go也是如实遵循这种约定。

如果你想达到你的预期权限,知道Umask及其用法是必须的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Linux内核中常用的创建目录相关的API: 1. int mkdir(const char *pathname, mode_t mode):创建一个新目录。 2. int mkdirat(int dirfd, const char *pathname, mode_t mode):在指定的目录下创建一个新目录。 3. int rmdir(const char *pathname):删除一个指定的空目录。 4. int chdir(const char *path):改变当前工作目录。 5. int fchdir(int filedes):改变当前工作目录到一个指定的文件描述符。 6. int mkdirp(const char *dir, mode_t mode):创建多级目录,当指定目录的上级目录不存在时也一并创建。 除此之外,还有一些其他的相关API,如: 7. int stat(const char *pathname, struct stat *statbuf):获取指定的文件或目录的状态信息。 8. int fstat(int filedes, struct stat *statbuf):获取指定文件描述符对应的文件或目录的状态信息。 9. int lstat(const char *pathname, struct stat *statbuf):获取符号链接指向的文件或目录的状态信息。 10. int access(const char *pathname, int mode):检查指定的文件或目录是否具有指定的权限。 11. int chmod(const char *pathname, mode_t mode):修改指定文件或目录的权限和许可位。 12. int chown(const char *pathname, uid_t owner, gid_t group):改变指定文件或目录的拥有者及所在组。 13. int truncate(const char *pathname, off_t length):将指定文件截断或扩大到指定长度。 14. int ftruncate(int filedes, off_t length):将指定文件描述符对应的文件截断或扩大到指定长度。 15. int link(const char *oldpath, const char *newpath):创建一个硬链接。 16. int unlink(const char *pathname):删除指定的文件或目录。 17. int rename(const char *oldpath, const char *newpath):重命名指定文件或目录。 18. int symlink(const char *oldpath, const char *newpath):创建一个符号链接。 19. int readlink(const char *pathname, char *buf, size_t bufsiz):读取符号链接的内容。 20. int chroot(const char *path):改变当前进程的根目录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值