修改文件的权限
我这里有一个test.txt
文件,我们ll
查看一下该文件相应的属性信息
其中,权限的位置是相对固定的即:
第一个位置是r
权限,代表可读权限。
第二个位置是w
权限,代表可修改权限。
第三个位置是x
权限,代表可执行权限。
我们这样玩,如果位置上的权限存在,我们就记为1
如果不存在我们就记为0
这样一来,上面的图就改成了这样:
我们把上面的结论总结一下:
---
是: 000
rw-
是: 110
r--
是: 100
我们再操作一下,上面的0
和 1
有点像二进制呀,发现没。那我们干脆就把上面的数看成二进制数。
看成二进制数之后,我们可以进制转化一下,把二进制
转化为8进制
哎, 你会想为什么要转化成8进制,为什么不转化成其他进制?
因为:上面一个人的权限是由3个部分组成的(r w x)
3 个部分即 3 个比特位,数据取值范围是:0~7,所以是转化为8进制
好,由上,我们再来整理一下:
---
是: 000
转化——>0
rw-
是: 110
转化——>6
r--
是: 100
转化——>4
提一下:
rwx
是 111
转化——>7
好了,那么我们再来整理一下吧:
这种用8进制
来表示权限的办法也是可以再linux的命令行里直接用的,比如:
看权限就被改了
修改文件的拥有者
sudo chown xxx(把文件给谁) xxx(给的文件)
比如:下面这个文件是我的
我要把这个文件给root
使用:sudo chown root test.txt
修改文件的所属组
sudo chgrp xxx(给谁) xxx(文件是什么)
用以上的例子举例:
sudo chgrp root test.txt
如何同时修改拥有者和所属组
sudo chown 拥有者:所属组 要修改的文件
使用:sudo chown xiaochen:xiaochen test.txt
研究一下文件的默认权限
我们先创建了两个文件:test.txt
, text1.txt
和两个目录:dir
和dir1
我们会发现这些文件和目录都有默认的权限,
观察上面的文件权限,我们在转化一下,即:利用我之前讲的转化一下,把权限转换成8进制来表示。
在Linux下我们创建一个文件,如果这个文件是目录的话,那么它的起始权限是从777
开始的,如果这是个文件是一个普通文件,那么它的起始权限是从666
开始的。
Linux系统中是允许我们自己来设置默认的权限值的。如果我们要自己设置权限的默认值,那么这个时候我们要引进一个新的概念,叫权限掩码。
那么什么是权限掩码呢?
我们可以通过下面这串指令来看看我们当前的权限掩码是多少。
umask
在输出的权限掩码的结果中,第一个零我们不考虑,我们只考虑后面的三位数即:002。
同时我们也可以使用umask来修改我们当前的权限掩码。
当我们修改了权限掩码之后,我们的默认权限也会跟着受到修改。但他们之间的关系并不是:
你将权限掩码修改为0004后,默认权限也会变成0004。(这样想是错的)
你将权限掩码修改为0004后
新的默认权限=原先的默认权限-权限掩码(这样想也是错的)
正确的是:
新的默认权限(二进制的形式)= 原来的默认权限(二进制的形式) & (~权限掩码)(二进制的形式)
&:表示的是逻辑与。
~:表示的是按位取反。
目录的权限分析
像平常我们用touch指令创建一个文件。这个文件会有读 写和可执行的相关权限。但是如果我们用mkdir
来创建一个目录文件,这个目录文件也会有读写和可执行的相关权限。
这个时候你会不会感到很迷惑?
普通文件有读写和可执行的权限我们还能理解。
就像在Windows中我们可以读一个文档,在这个文档里面写东西,如果这个文档是一个点c的源程序,我们可以执行这个文件,但是目录,Windows中从来没有什么读目录,写目录,执行这个目录。
目录?读?写?和可执行?
你会感到疑问,目录的读是什么意思?目录的写是什么意思?可执行目录又是什么意思?
来,我们来分析一下。
当你用mkdir
创建一个目录的时候。
如果你要进入这个目录,你需要的是x
权限即可执行权限。如果缺少这个权限,你将无法进入此目录。
如果你想查看这个目录下的文件信息,你需要的是可读权限即:r
权限。如果你缺少这个权限的话,当你用ls
查看当前目录下的文件的时候,你的请求会被拒绝。
如果你想要在这个目录下创建新的文件或者删除以前的文件。你需要的是可修改权限即:w
权限。 如果缺少这个权限,在当前目录下,当你使用touch
命令或mkdir
命令的时候,你的请求会被拒绝。
我们知道一个文件一定是属于一个目录的。
一个文件有读写和可执行的权限。
一个目录也有读写和可执行(可进入)的权限。
由之前的分析我们可以知道一个文件能否被查看,能否被写入,能否被删除,是由目录的权限来决定的。
如果目录没有x
权限,那你都无法进入这个目录。
如果目录没有r
权限那你无法查看这个目录下的所有文件。
如果目录没有w
权限,那里无法删除这个目录下的文件并无法在这个目录下创建文件。
但是一个文件能否被修改,可以由文件的权限来决定,因为目录是没法修改文件的,目录的权限只能约束你来删除这个文件,或者查看这个文件的属性。目录的权限是没办法修改文件的内容的。
一个文件是属于一个目录的,一个文件能不能删除不是由这个文件本身决定的,而且由这个文件所处在的目录决定的,如果这个目录赋予了相应的账号有w权限。那么这个相应的账号的人就可以删除你这个文件。
这个时候你会感到疑惑。
你说你创建一个新目录。
这个新的目录
虽然给了other
组有w
的权限。
但是这个目录下你创建的文件
并没有给other
有w
的权限。
难道这样other也能删除这个目录下的文件吗?
对,也可以删。
如上所说,一个文件能否被删除不是由这个文件来决定的,而是由这个文件所在的目录来决定的。虽然你这个文件没有给other组w的权限。但是当前文件所在的目录给了other组w的权限。那么other组的人就可以把你这个文件删除掉。
同理:
如果目录没有给other组w的权限,该目录下的文件给了other组w
的权限,如果要删除这个文件的话,也是没办法删除的,因为你的目录没有给Other组w
的权限。