![文件系统技术内幕:大数据时代海量数据存储之道](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=1739279909-Wg30YTVA90a7UsQV8WAkfa7YMzGU7uyY-0-132e7de02d43183397754fd48f7d5d98)
其中,第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=1739279909-VmbYDlJwdLxE37ZubEJghOD7fxxr15HM-0-bd15596a3dc7d73bcd7a077ffbe79efd)
这种方法的缺点是将文件原始的权限都覆盖了。比如,想要为某个文件添加某一项权限,似乎并不太好实现。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_46_1.jpg?sign=1739279909-9yVvMUeeWvqY7OshWtu03YujAbxZ3Xfb-0-8cac5b0590a2ff1940a49d5a649ab85a)
图2-10 设置文件的权限
其实仍有实现的办法,就是先通过stat接口来获取文件的原始权限信息,添加期望的权限后再设置该文件的权限。这次给该文件增加执行权限,如代码2-6所示。
代码2-6 文件的权限修改
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_46_2.jpg?sign=1739279909-c3WOwppvg94BnyRflNObC6En8dxMnonM-0-367f3dc3f44d101ce95b22a09f8374f6)
重新编译并执行该代码可以看出,这次是在原始权限的基础上增加了执行权限,而不是把原来的权限都给覆盖了,执行结果如图2-11所示。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_47_1.jpg?sign=1739279909-qyeTwB9djgrPQLhP6jIQ2h4Opw14wz9W-0-a1eded32a43f1fb01de1f5ec4716020f)
图2-11 为文件增加执行权限
这个API只能修改文件的权限信息,无法修改文件的所属用户和组的信息。如果想要修改所属用户和组的信息,则可以使用chown()函数,该函数的语法格式如下:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_47_2.jpg?sign=1739279909-QUymSB88AAL0WeGkXES8rNH0hE44YVUw-0-31c7c8ecd802d08cc2132208a6e1fa39)
如果想要设置文件的所属用户和组,只需要将用户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=1739279909-FVgjelbcZmI5N9AQhcyBWSvhVpD0OhBv-0-dade4e56a6a00d137c6878eecfaf69b7)
执行上述命令后,就可以得到与前面程序一样的结果,如图2-11所示。可以看出,通过命令行的方式对文件的权限进行修改要简单快捷得多。
由于底层是采用二进制的方式存储的,chmod命令也是支持通过数字的方式修改其权限属性的。比如,执行如下命令:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_47_4.jpg?sign=1739279909-kME3qjDE6ZjLRypZAv5OjRTuP9RkkilF-0-790056b8d65b0b6cc7170bd75487dfd9)
其中,777就是使所有的RWX都设置为1,即可以被任何用户和组访问。执行结果如图2-12所示。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_48_1.jpg?sign=1739279909-mVRcq2KpbCUyKMSC3nYz6aKAcMCAsCwv-0-e9717c12dace5088b5402541e64491ae)
图2-12 通过命令设置权限
2.chown命令
chown命令用于修改文件的所属用户信息。比如,将属于root的文件test.bin改为属于sunnyzhang,可以执行如下命令:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_48_2.jpg?sign=1739279909-TGa3cVkE35EUzHnITCpTKFLjvcdjj9HL-0-bdf3d4f75740e6ed954272c9cf7944a3)
3.chgrp命令
从名字上可以看出,chgrp命令用于修改文件的所属组信息。使用方法很简单,本节不再赘述。
关于RWX-UGO的权限访问控制就先介绍到这里。其实除了RWX-UGO权限控制,还有其他类型的权限控制,如ACL权限控制。