Linux权限管理——基本权限

时间:2021-09-24 16:39:39

修改权限命令chmod

chmod  [选项]  模式  文件名
选项:-R递归修改权限

模式:

模式分为两类:

1.ugoa

字母依次代表所属人,所属组,其他人和所有人(全部人)。

在这个模式下,使用+-增加或者删除某个权限即可。

例如:

chmod u+x 文件名

意思即为所属人增加执行权限。

这种模式使用的并不常见,需要事先知道文件的权限。

2.421模式

意思即为用数字421表示权限,r为4,w为2,x为1。

某个组的权限用他们的权限的和表示。

例如,修改所属人的权限为7,即所属人的权限为rwx。

因为4,2,1分别代表二进制数字,所以求和并不会产生歧义。

这个模式是常用的修改权限模式。


常用的权限:

777 最高权限

644 普通文件权限

755 执行文件权限

等等。


权限的作用:

权限对于文件和目录具有不同的作用,虽然好像都是rwx,但是对于文件和目录的作用的表现形式是不同的。

我们知道,Linux文件系统存储文件会在表中创建一个项,这个表叫Inode Table。

其他的字段在这里我都不关注,只关注inode-no编号和pointer两个字段。

Linux权限管理——基本权限

存储的文件会大致是这样的形式。

目录内容指向文件,文件内容指向某一块区域,包含实际内容。


所以对于文件,权限的作用如下:

r: 读取文件内容

w: 编辑,新增,修改文件内容

x: 执行文件

需要注意的是,对于文件,即使有w权限,我们也无法删除这个文件,只能对文件内容进行修改。


对于目录:

r:可以查询目录下包含哪些文件

w:可以修改目录结构。例如删除某个文件,创建某个文件

x:进入目录


到这里我们就知道了,权限对于文件来说,就是操作文件本身,x就是进入pointer去执行。

所以r,w都只能对文件本身进行修改,而删除文件等是修改了上一级目录的结构。

对于文件来说:最高权限为x。

对于目录来说:最高权限为w。



权限我们知道如何设置了。那么我们需要对用户进行分类分组等等操作。

修改文件所有者:chown(change owner)

chown 用户名 文件名
修改文件所属组:chgrp(change group)

chgrp 组名 文件名



默认权限

在linux中,一个刚刚创建的文件,使用touch创建出来的文件是有一个默认权限的,即为644。

在windows系统中,也是存在默认权限的,windows系统中使用的是继承权限,继承上一级目录中的权限。


在Linux中如何查看默认权限呢?

使用umask命令即可查看默认权限。

[root@localhost ~]# umask
0022
这个是什么意思呢?

第一个0:文件特殊权限

第二个0:读权限

第一个2:写权限

第二个2:执行权限。


再其次我们需要只要一些规则:

对于文件:

1.默认不能建立执行文件

2.默认文件最大权限为666

对于目录:

1.默认最大权限为777


到这里我们还是不知道默认权限是怎么来的?

实际上默认权限是当前文件最大权限与umask设置的权限做逻辑异或运算得到的权限。

例如:

对于文件默认为666。即4+2,4+2,4+2。在二进制中即为110,110,110。

而umask设置的默认权限为022。二进制即为000,010,010。

做逻辑异或运算得到什么呢?

最终就得到110,100,100.也就是644。可以简单的理解为减法。

同样的,目录得到的默认权限即为111,101,101.也就是755。


我们可以修改umask的值来测试是否如此。

原本:

[root@localhost ~]# mkdir test
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1209 Apr 25 11:20 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 May 3 16:18 test
[root@localhost ~]#
修改:

[root@localhost ~]# umask 0000
[root@localhost ~]# umask
0000
[root@localhost ~]# mkdir test2
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1209 Apr 25 11:20 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 May 3 16:18 test
drwxrwxrwx. 2 root root 6 May 3 16:20 test2
[root@localhost ~]#
最后得到的test2目录为777。


使用umask修改的值为临时修改,如果要永久修改,可以到/etc/profile文件下进行修改。