每天整理点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的主要内容,如果未能解决你的问题,请参考以下文章