目录
1.默认权限
创建用户时拥有者所属组都是该用户,而且对其他人没有任何权限
掩码
新建文件new.txt1和目录folder后,立刻查看它们的权限:

显示目录的默认权限:775
显示普通文件的默认权限:664
思考:为什么会出现以上默认的权限?
其实:系统提供普通文件的默认权限是666,而目录的默认权限是777,664与666不同的原因和775和777不同的原因和权限掩码umask有关
输入umask命令:
bash
umask

只看后3位002,最左侧的0不管,给出以下规则:
在umask出现的权限(二进制位为1)不会在最终的文件权限中出现,而umask中未出现的权限(二进制位为0)保持起始的权限位

推测最终权限是掩码和起始权限通过某运算规则得到的,
这个运算规则是:最终权限=原始权限&(~掩码)
也可以变形为**~(~原始权限|掩码),使用德摩根定律**
写一个简单的程序验证下:
cpp
#include <stdio.h>
int main()
{
printf("%d", 666 & (~002));
return 0;
}
运行结果:

cpp
#include <stdio.h>
int main()
{
printf("%d", ~(~666|002));
return 0;
}
运行结果:

修改权限掩码
例如修改成0123:
cpp
umask 0123

目录的权限说明
使用控制变量法,逐个尝试,设目录folder里面有test.txt文件
r权限
先禁掉w和x权限:
cpp
chmod u+r-wx,g+r-wx,o+r-wx folder
查看目录中的文件:只知道文件名,但不知道文件的权限

无法查看test.txt的内容:

无法向test.txt写入内容写入内容:

不允许进入目录:

w权限
先禁掉r和x权限:
cpp
chmod u+w-rx,g+w-rx,o+w-rx folder
无法查看目录中的文件:

无法向test.txt写入内容写入内容:

不允许进入目录:

x权限
先禁掉r和w权限:
cpp
chmod u+x-rw,g+x-rw,o+x-rw folder
无法查看目录中的文件:

尝试向test.txt写入内容:可以写入,能打印到显示器上

可以进入目录里:

结论
可执行权限x: 如果目录没有可执行权限, 则无法cd到目录中;
可读权限r: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容;
可写权限w: 如果目录没有可写权限, 则无法在目录中创建、更改或删除文件.
-->一个文件是否能被删除,不由文件本身决定,而由其所处的目录决定
家目录权限
普通用户的家目录权限是700,也就意味着一个普通用户无法访问另一个普通用户的目录,但root除外,其有最高权限

2.共享目录
如果多个普通用户想共享一个目录,则这个共享目录不能在任何一个人的家目录下
现以root身份创建共享目录shared:

粘滞位t
为了防止其他用户删除目录中的文件,
1.shared目录中,对other去掉权限w是不能解决问题的,由上述对w权限的分析,这样就无法创建文件,
2.缺点:只能以root身份建立共享目录,且只有以root身份才能增删改查,例如上方提到的shared目录
解决方法:根目录下有一个自带的tmp目录**,可以在其中对用户各自的文件进行增删改查操作,其中权限中的t为粘滞位(可以通过chmod o+t设置),是特殊的x权限,当前认为: 只有root和拥有者能删除文件,其他人都不允许**

例如以guest身份创建一个test.txt,切换为zhang身份却发现无法删除test.txt
