umask(进程的文件权限掩码) 讲解
1 umask命令讲解
-
umask概述:登录系统之后在当前登录shel进程l中,创建一个文件总是有一个默认权限的,默认权限的由来就是umask干的事情,umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码
- 针对目录文件来说x权限代表可以进入该目录,所以说目录文件创建时是777和文件掩码运算
- 针对一般的文件x权限代表该文件可以执行,风险太高,一般初始赋值是采用666和文件掩码运算
-
查看该用户当前系统的文件权限掩码的命令:
-
/*0022是系统当前默认的文件权限码,进行分析 第一个0代表suid 丢弃的权限; 第二个0代表本文件/目录拥有者什么权限都没丢弃(如果是文件,x权限除外); 第三个2代表本文件/目录的用户组丢弃了w权限(如果是文件那么它的x权限也丢弃); 第四个2代表本文件/目录的其他用户能使用的权限只有有r和x(文件只丢弃x) 综合上面: 如果你新创建一个文件,那么它的权限是:-rw--r--r-- 即是:644 计算过程:666 & (~022) = 644 如果你新创建一个目录,那么它的权限是:drwxr-xr-x 即是:755 计算过程 777 & (~022) = 755 */
-
/* umask nnn 设置系统当前默认的文件权限掩码为nnn nnn取值范围:000~777(8进制) 用户退出之后,文件权限掩码会返回默认值。如果要永久生效的话,必须在相应的配置文件(/etc/login.defs)中修改 */
-
-
-
如何计算一个文件的权限值了的:
-
/* mode:设置的文件权限 cmask:文件权限掩码 文件最终的权限码:mode & (~cmask) 也可以理解为创建文件时去掉文件权限码对应的权限位 4->r 2->w 1->x */
-
-
umask设置注意:
- umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最 大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说,umask中各个数字最大可以到7
2 umask函数讲解
-
/******************** 函数功能:为当前进程设置文件权限掩码,返回以前的文件权限掩码 ********************/ #include <sys/stat.h> mode_t umask(mode_t cmask); /*cmask是由下表列出的9个常量中的若干个按位“或”构成的 S_IRUSR 用户读 S_IWUSR 用户写 S_IXUSR 用户执行 S_IRGRP 组读 S_IWGRP 组写 S_IXGRP 组执行 S_IROTH 其他读 S_IWOTH 其他写 S_IXOTH 其他执行 */
-
在Linux中一个文件的权限分为3组9个权限 分别为上面列出的9个,组间的顺序为所有者,所属组,其他人。例如:
ls -l test
-rw-rw-rw- 1 shmily shmily 0 5月 6 17:16 test
表示test文件的权限为:所有者可读可写,所属组可读可写,其他人可读可写 (r代表可读 w代表可写 x代表可执行 -代表未设置)
可用三位8进制数表示 则test的权限为666 -
umask的主要作用是在创建文件时设置或者屏蔽掉文件的一些权限
在创建一个文件时要指明该文件的权限,open函数的最后一个参数mode并不是要设置的权限,它需要执行以下操作
mode & (~cmask)得出的结构才是最终文件的权限