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