在之前的一篇博客中分享了关于权限的一些知识,这次紧接上次的进行,有需要了解上次的可以点这个链接: link。
话不多说,继续开始权限篇。
我们需要先知道,一个文件的权限,谁能修改?
一般来说有两个:一个是文件的拥有者,另外一个是root。
要修改文件的权限需要一个命令chmod
举个例子:将a.txt中拥有者的权限中,去掉r。
我们来看一下:
chmod u-r a.txt
也可以同时去掉多个权限,比如:将b.txt中拥有者的rw都去掉
可以同时去掉,当然也可以同时加上:
将a.txt中拥有者的rwx都加上:
这里拥有者用u
表示,所属组用g
表示,other用o表示。也可以全部都同时加减全限,此时用all
。
来看一个所属组的例子:
去掉a.txt中所属组r的权限:
chmod g-r a.txt
如果想同时操作多个对象,也是一样的,举个例子:将a.txt中拥有者去掉r,所属组去掉w。
chmod u-r,g-w a.txt
所以我们可以更改一个人的一个权限,一个人的多个权限,多个人的一个权限,多个人的多个权限,不过组合时用逗号做分离。
如果给所有人都加上同一个权限,可以直接用all。
举个例子:将b.txt中所有人都加上w。
chmod a+w b.txt
用普通账号创建一个文件t.txt
去掉文件的所有权限后,执行读文件和向文件写入,发现都不行。
对于普通用户,自身要受到对应权限的约束,即使这个文件是直接的。
当把t.txt中所有的权限全部去掉之后,root还是想写入就能写,想读就能读。
root账号不受权限的约束。
当把账号切换成普通用户时,属于other,没有读写权限,我们发现不能读写t.txt。
总之:权限存在的意义就是保证普通用户的文件的一般安全性。
在身份识别的时候,只识别一次。
更改文件的拥有者,先切换到root账号下。
把文件的拥有者改为root
chown root t.txt
给所属组加上rw权限
当zxctscl不是拥有者时,自动匹配到后面的所属组。
发现所属组仍然可以读写。
把文件的所属组也改为root
chgrp root t.txt
给other加上rw权限
chmod o+rw t.txt
这时使用普通账户就能继续进行读写。
所以说:访问一个文件时,得先判定相对于这个文件来说是拥有者、所属组还是other,然后再在这个33为一组特定的权限列表里,进行权限识别,然后才能决定到底能不能访问这个文件。
用普通账户新建一个文件file.txt
想把文件的拥有者改为rjjjcph,但是不被允许:
所以说在把文件给别人时候,可能权限不允许,但是又要把文件给别人时,如果是普通账户就强制给,加上sudo
。而root账号不需要加。
sudo chown rjjjcph file.txt
把所属组也改为rjjjcph:
那么怎么改回去呢?
直接sudo chown
sudo chown zxctscl:zxctscl file.txt
也可以将拥有者改为zxctscl,将所属组改为root
sudo chown zxctscl:root file.txt
那么为什么不需要修改other呢?
但修改了拥有者和所属组,那么other自然也就改变了。
在之前就谈到:
有就对应1,没有就对应0。
所以对于a.txt中的
拥有者: 110 -> 6
所属组:110 -> 6
other:100 -> 4
用8进制表示就是664
所以可以用8进制来表示权限。
举个例子:把所有人的所有权限都加上
chmod 777 a.txt
chmod 660 a.txt
chmod 八进制 filename
在window中是通过文件的后缀来判断文件类型。
Linux并不是通过文件后缀来判断的,那么它是怎么区别的呢?
通过第一个属性列来区分。
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
磁盘:
Linux系统不以文件后缀作为区分文件类型,但并不是代表gcc不需要。
所以说Linux!=gcc
也就是说Linux不区分文件类型,但是Linux上面的工具可能会区分。
所以我们可以对Linux的文件使用后缀。
如果我们进入一个目录,那么需要什么权限呢?
先去掉拥有者目录的r,结果显示能进入目录:
所以进入一个目录与r无关
但是不能查看指定目录内的信息
加上r,去掉w,看看能不能进入一个目录?
加上r,去掉w,看看能不能进入一个目录?
发现不能进入目录了。
总之:
目录的r权限:用户能否查看指定目录内的信息。
目录的w权限:决定用户是否能在指定目录内新建、修改、删除文件。
目录的x权限:决定用户能否进入一个目录
在Linux创建文件的时候,为什么好像有默认权限?为什么就是我们所看到的这样?
创建普通文件时,起始权限是:0666,去掉x
创建目录文件时,起始权限是:0777,包含x
我们使用umask
来看看默认值,不同的平台可能会有不同,这个是正常的。
来计算一下普通文件,显示的权限怎么来的:
先将umask
按位取反,在将666与取反之后的进行按位与,最后得到的就是664,刚好就是rw-r–r–
有错误请指出,大家一起进步吧!