一、介绍:
在Linux操作系统中:
r -4:可读权限
w -2:可写权限
x -1:可执行权限
问题1:三个权限为1,2,4,分别对应:2^0,2^1,2^2,为什么要用8进制表示用户的文件权限?
问题2:如何实现文件权限的增加和减少?
二、解答
问题1:
简洁明了:使用八进制表示法可以将文件权限表示为一个三位数,每个数字代表一个权限组(所有者、组和其他用户)。这种表示方法相对简洁,不需要额外的符号或文字描述。
直观易懂:八进制数字与实际权限之间存在直接的对应关系。每个数字代表一个权限组(r、w、x),并且通过将这些权限组的数字组合在一起,可以快速了解文件的权限设置。
方便修改权限:通过直接修改文件权限的八进制表示,用户可以轻松地更改文件或目录的权限,而不必记住复杂的权限字符表示方法。
适用于脚本编程:在编写 Shell 脚本或其他编程语言时,八进制表示法更容易用于自动化文件权限设置的脚本中,因为它是一个简单的数字,可以直接在代码中使用。
问题2:
用按位或 | 实现功能的叠加,用按位与取反 &~实现功能的关闭
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int access = 0;
int r = 4;
int w = 2;
int x = 1;
printf("打开可读权限\n");
access |= r;
printf("access = %d\n",access);
printf("打开可写权限\n");
access |= w;
printf("access = %d\n",access);
printf("打开可执行权限\n");
access |= x;
printf("access = %d\n",access);
printf("再次打开可读权限\n");
access |= r;
printf("access = %d\n",access);
access = access & (~r);
printf("access = %d\n",access);
access = access & (~w);
printf("access = %d\n",access);
access &= (~x);
printf("access = %d\n",access);
access &= (~r);
printf("access = %d\n",access);
return 0;
}
三、总结:
使用 8 进制来表示:方便我们能够快速的创建一个能够实现类似功能数字
所有能够参与系统底层代表某些功能开关叠加的数字,必须都是2^n 来进行按位或 | 运算
所有能够参与系统底层代表某些功能开关关闭的数字,必须都是2^n 来进行按位与取反 &~ 运算