每天整理点Linux--umask | chmod

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天整理点Linux--umask | chmod相关的知识,希望对你有一定的参考价值。

  当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。

 

#include "apue.h"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>

#define RWRWRW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)

int main()
{
    struct stat statbuf;
    //更改进程的 umask值不会改变 其父进程的umask
    umask(0);
    if (creat("foo", RWRWRW) < 0)
    {
        printf("create error");
        exit(0);
    }
    umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
    if (creat("bar", RWRWRW) < 0)
    {
        printf("create error");
        exit(0);
    }
    
    /* chmod 改变文件访问权限  */
    
    /*
    if (stat("foo", &statbuf) <0 )
    {
        printf("stat error");
        exit(0);
    }
    // S_IXGRP 执行时设置组ID  设置了组ID位 关闭了组执行位
    if (chmod("foo", (statbuf.st_mode & ~S_IXGRP) | S_ISGID ) < 0 )
    {
        printf("chmod foo error");
        exit(0);
    }
    if (chmod("bar", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))
    {
        printf("chmod bar error");
        exit(0);
    }
    */
    return 0;
}

 技术分享

 

以上是关于每天整理点Linux--umask | chmod的主要内容,如果未能解决你的问题,请参考以下文章

每天整理点Linux--块设备,字符设备

linux umask

每天整理点Linux--gcc常用选项

linux umask权限算法

Linux umask

Linux命令chmod是啥英文单词的缩写