![文件系统技术内幕:大数据时代海量数据存储之道](https://wfqqreader-1252317822.image.myqcloud.com/cover/284/43738284/b_43738284.jpg)
2.5.2 设置文件的RWX权限
2.5.2.1 基于API的权限设置
在Linux中有相关的API来修改这个权限。修改权限的语法格式如下:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_45_1.jpg?sign=1738858677-q3I1Sw59D3dSJZZDO0L2gbel8ywgfEca-0-6003daa7fe7c6d02aebd7d2dfd551390)
其中,第1个参数是文件名,第2个参数是目标权限。执行chmod()函数可以将文件设置为目标权限。
接下来看一下chmod()函数的用法。假设这里有一个测试文件,名称为test.bin。该文件的初始权限信息如图2-10上半部分所示(-rw-r--r--)。通过代码2-5,将文件的权限设置为S_IRUSR,也就是所属用户可读。编译运行该代码后,发现文件的权限变成如图2-10下半部分所示的内容(-r--------)。
代码2-5 文件的权限修改
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_45_2.jpg?sign=1738858677-Eoz3D4OGwOv26cQpv1DSm1NRXyn8HiWq-0-a06bf19dfba4e2221a18bb12384dfe1d)
这种方法的缺点是将文件原始的权限都覆盖了。比如,想要为某个文件添加某一项权限,似乎并不太好实现。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_46_1.jpg?sign=1738858677-M1sL6iSOeGgiX7JphwEWbMKJssA01Ps0-0-7ce1b4892507db53036d038a36d5ccb1)
图2-10 设置文件的权限
其实仍有实现的办法,就是先通过stat接口来获取文件的原始权限信息,添加期望的权限后再设置该文件的权限。这次给该文件增加执行权限,如代码2-6所示。
代码2-6 文件的权限修改
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_46_2.jpg?sign=1738858677-cuu2jBRlsPbPwcpMrmDOG1R4Z0McAVZ2-0-a737bb0d4e4945a435e641608d023ee4)
重新编译并执行该代码可以看出,这次是在原始权限的基础上增加了执行权限,而不是把原来的权限都给覆盖了,执行结果如图2-11所示。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_47_1.jpg?sign=1738858677-lFqVUQXYS0ODz6S9APyzUHPVEz0SszVa-0-153f5ec583077d88c3cbd94de0ab4d35)
图2-11 为文件增加执行权限
这个API只能修改文件的权限信息,无法修改文件的所属用户和组的信息。如果想要修改所属用户和组的信息,则可以使用chown()函数,该函数的语法格式如下:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_47_2.jpg?sign=1738858677-PuFrWFhyTyyPMQAUBxtJ9tjZafchTsDf-0-88bd394d0b1c060ee1cf924a918c367b)
如果想要设置文件的所属用户和组,只需要将用户ID和组ID传进去即可。由于比较简单,这里不再举例说明。
2.5.2.2 基于命令的权限设置
通过编程的方式可以实现文件的权限修改,但是在日常操作中非常不方便。不必着急,Linux已经为我们提供了相关的命令行工具,这些命令行工具与函数同名,如chmod和chown等。
1.chmod命令
还是以前面添加执行权限为例,可以在命令行中执行如下命令:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_47_3.jpg?sign=1738858677-bvCAu7tiLN2fejiyS9UfhqCy0vFCvSSr-0-21f3fee29f7354e46b14e52a76a3194c)
执行上述命令后,就可以得到与前面程序一样的结果,如图2-11所示。可以看出,通过命令行的方式对文件的权限进行修改要简单快捷得多。
由于底层是采用二进制的方式存储的,chmod命令也是支持通过数字的方式修改其权限属性的。比如,执行如下命令:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_47_4.jpg?sign=1738858677-KaIUx9UukwL34wmwiRbVaPNw3cRWsgTK-0-f35daa5e379d8c67c674648401aedc9c)
其中,777就是使所有的RWX都设置为1,即可以被任何用户和组访问。执行结果如图2-12所示。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_48_1.jpg?sign=1738858677-uKh48RJViurx0MIx2KN7MkdY08z74DAx-0-a551336f6039ae3330177150d53c494c)
图2-12 通过命令设置权限
2.chown命令
chown命令用于修改文件的所属用户信息。比如,将属于root的文件test.bin改为属于sunnyzhang,可以执行如下命令:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_48_2.jpg?sign=1738858677-NLQqKKOyAO8oYEIeHc1ELlMiS7C4DKFQ-0-3ed92bc963ec785badf68b5573f78bb1)
3.chgrp命令
从名字上可以看出,chgrp命令用于修改文件的所属组信息。使用方法很简单,本节不再赘述。
关于RWX-UGO的权限访问控制就先介绍到这里。其实除了RWX-UGO权限控制,还有其他类型的权限控制,如ACL权限控制。