umask

    xiaoxiao2022-07-02  105

    chmod abc file

    其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

     

    在linux操作系统上,文件系统预设的默认权限是666;而目录系统预设的默认权限是777,但这里的默认权限并不是生成文件或者目录时的权限,而是经过掩码(umask)遮挡掉某些不需要的默认权限最后生成用户所需的文件或者目录的最终权限;

    使用umask命令查看当前用户创建文件时的默认掩码,可以得出普通用户的umask值是002,root用户的umask是022

    如果是root用户创建一个普通文件,则默认权限是644,这个是如何得出的呢?

    首先不是直接使用666-022,也不是通异或运算,而是‘遮挡’效果,后面介绍  

    文件系统预设的默认权限: rw_ rw_ rw_ 666 umask ___ _w_ _w_ 022 最终文件默认权限 rw_ r__ r__ 644

    原理:umask对应位上的值就是文件系统预设的默认权限被’遮挡’的值group 和 other权限位上的w遮挡掉只剩下 r 权限

    同理:可以得出root用户创建目录的默认权限是 :755

    目录系统预设的默认权限: rwx rwx rwx 777 umask ___ _w_ _w_ 022 最终文件默认权限 rwx r_x r_x 755

    普通用户创建文件的默认权限:664

    文件系统预设的默认权限: rw_ rw_ rw_ 666 umask ___ ___ _w_ 002 最终文件默认权限 rw_ rw_ r__ 664

    普通用户创建目录的默认权限:775

    目录系统预设的默认权限: rwx rwx rwx 777 umask ___ ___ _w_ 002 最终文件默认权限 rwx rwx r_x 775

    为什么说不是使用预设的系统默认权限减去umask的值呢?也不是异或运算呢?

    例子:如果将umask改成033以root用户为例,如果只是单纯的相减结果是633,异或运算结果是655

    使用’遮挡‘原理:结果是644

    文件系统预设的默认权限: rw_ rw_ rw_ 666 umask ___ _wx _wx 033 最终文件默认权限 rw_ r__ r__ 644

    这里 group位和other位的权限需要‘遮挡’的权限是wx而x原来就是没有的,遮挡后就是 r 最终结果是644

    这三个到底哪个正确呢?只需要使用root创建一个文件,再使用ls -l命令查看文件的权限就能发现,‘遮挡’原理是正确的,而不是单纯的相减,也不是异或运算,有的教程说的是先转换成字符再相减,这种说法也不严谨,就像这个例子rw_ 减去 _wx 等于多少呢??  

     

    最新回复(0)