标题:[实践OK]linxu下umask 000 为什么执行下来不是 777而是666呢?? 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Mon, 08 Jun 2020 15:18:48 +0000 作者:jackxiang 地址:https://jackxiang.com/post/10588/ 内容: #! /bin/sh umask 000 touch abcde.txt mkdir abcde -rw-rw-rw- 1 root root 0 Feb 18 16:38 abcde.txt #666 文件 drwxrwxrwx 2 root root 4096 Feb 18 16:38 abcde #文件夹777 umask 0022 #没有了w权限 -rw-r--r-- 1 root root 0 Feb 18 16:40 abcde.txt #644文件 drwxr-xr-x 2 root root 4096 Feb 18 16:40 abcde #文件夹755 umask 命令会从新创建的文件权限中减去一个掩码,以确定文件的实际权限。这个掩码默认值为 022,即将文件默认权限的写权限屏蔽掉,使其不能写入。因此,当 umask 设置为 022 时,新创建的文件的权限就会变成 644,新创建的目录权限则会变成 755。 执行脚本后,根据 umask 的设置: abcde.txt 文件的权限为 -rw-rw-rw-,即666,因为umask没有屏蔽任何权限,所以新建文件的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。 abcde 目录的权限为 drwxrwxrwx,即777,同理,因为umask没有屏蔽任何权限,所以新建目录的权限完全由 umask 以外的部分决定,umask 之前的权限就是实际权限。 接着,如果你执行 umask 0022 将umask设置为 0022,则权限掩码会屏蔽掉文件的写权限,目录的写权限不受影响,具体计算方式为: 文件的实际权限为:原权限 (666) - 掩码 (022) = 新权限 (644),即 -rw-r--r--。 目录的实际权限为:原权限 (777) - 掩码 (022) = 新权限 (755),即 drwxr-xr-x。 八进制 → 十进制   方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。   八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。   例:将八进制的(53)O转换为十进制的步骤如下: 1. 第0位 3 x 8^0 = 3; 2. 第1位 5 x 8^1 = 40; 3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。 权限二进制值和八进制值的表格如下:https://blog.csdn.net/hnhygkx/article/details/104280304 umask 的作用是从文件的默认权限中减去一些权限,所以 umask 为什么数值就会影响最终的文件权限。777 权限表示所有用户都具有读、写、执行权限,因此它的二进制表示为 111 111 111,也就是说所有的权限位都被设置了。 umask 的作用是从默认权限中减去相应的权限。如果我们希望最终的权限是 777,那么 umask 就应该设置为 000。因为 000 与 777 相与后,仍然保持了 777 的权限,即: ``` 777 (111 111 111) & 000 (000 000 000) = 777 (111 111 111) ``` 因此,在这种情况下,umask 设置为 000。 在 Unix 系统中,umask 影响文件和目录的默认权限,但它们的默认权限是不同的。默认情况下: 对于新创建的文件,默认权限为 666。 对于新创建的目录,默认权限为 777。 umask 的作用是从这些默认权限中减去一些权限位。假设 umask 设置为 000,则文件的默认权限为 666,目录的默认权限为 777。 ============================================================ root如果没有umask(umask 000)则文件权限为666,目录权限为777,但是默认有的如下: root的缺省zhiunmask是022,一般用户是002。 所以,root用户umask 0022 一般目录是:755,原因是777-022=755. 文件,默认是644,666-022=644。 =============umask 000 为什么执行下来不是 777而是666呢??================== umask 000 umask 0000 touch index2.php touch index3.php -rw-rw-rw- 1 root root 0 Jun 8 15:08 index2.php -rw-rw-rw- 1 root root 0 Jun 8 15:08 index3.php 原因:因为这是个普通文件,普通文件是不能在创建时具有执行权限的,所以要去掉x 权限位(7-1),所以权限是6(可读写,7-1-0),0就是umask。 ll -d bdc drwxrwxrwx 2 root root 4096 Jun 8 15:23 bdc #目录就是777了。 解释:unmask制定bai了新文件创建时的权限,unmask是个8进制的数du字。root的缺省zhiunmask是022,一般用户是002。如dao果用户的umask为000,则创建的文件权限为666,目录权限为777,运行umask命令可以查看用户自己的umask值。 当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是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值。 Generated by Jackxiang's Bo-blog 2.1.1 Release