Linux文件属性3——文件权限管理

以下内容源于朱有鹏《物联网大讲堂》课程的学习整理,如有侵权,请告知删除。


1、st_mode中记录的文件权限位

  • st_mode本质上是一个32位的数(类型就是unsinged int),这个数里的每一个位表示一个含义。
  • 文件类型和文件的权限都记录在st_mode中。
  • 我们使用专门的掩码去取出相应的位即可得知相应的信息。

2、ls  -l,打印出权限列表

(1)共9位,3个一组。

  • 第一组三个表示文件的属主(owner、user)对该文件的可读、可写、可执行权限;
  • 第2组3个位表示文件的属主所在的组(group)对该文件的权限;
  • 第3组3个位表示其他用户(others)对该文件的权限。

(2)属主表明这个文件属于谁

  • 一般来说文件的属主就是创建这个文件的那个用户;
  • 但是一个文件创建之后可以用chown命令去修改文件属主,用chgrp命令去修改文件所在的组;

3、文件操作时的权限检查规则

一个程序a.out被执行,a.out中试图去操作一个文件1.txt。如何判定a.out是否具有对1.txt的某种操作权限呢?

  • 首先1.txt具有9个权限位,规定了3种人(user、group、others)对该文件的操作权限;
  • 判定1.txt是否能被a.out来操作,关键先搞清楚a.out对1.txt到底算哪种人;
  • 准确的说是看a.out(假设是777)被谁执行,也就是当前程序(进程)是哪个用户的进程。

4、access函数检查权限设置

  • access函数,检测当前执行程序的那个用户在当前那个环境下对目标文件是否具有某种操作权限。

#include 
#include 


#define NAME 	"3.txt"

int main(void)
{
	int ret = -1;
	
	
	ret = access(NAME, F_OK);
	if (ret < 0)
	{
		printf("文件不存在 \n");
		return -1;
	}
	else
	{
		printf("文件存在	");
	}
	
	ret = access(NAME, R_OK);
	if (ret < 0)
	{
		printf("不可读 ");
	}
	else
	{
		printf("可读 ");
	}

	ret = access(NAME, W_OK);
	if (ret < 0)
	{
		printf("不可写 ");
	}
	else
	{
		printf("可写 ");
	}

	ret = access(NAME, X_OK);
	if (ret < 0)
	{
		printf("不可执行 \n");
	}
	else
	{
		printf("可执行 \n");
	}	
	
	
	
	return 0;
}


5、chmod/fchmod与权限修改

  • chmod是一个linux命令,用来修改文件的各种权限属性;
  • chmod命令只有root用户才有权利去执行修改;
  • chmod命令是调用linux内部的chmod这个API来实现的;第一个参数表示文件指针,第二表示希望文件有的属性。
Linux文件属性3——文件权限管理_第1张图片


Linux文件属性3——文件权限管理_第2张图片

#include 
#include 
int main(int argc, char **argv)
{
	int ret = -1;	
	
	if (argc != 2)
	{
		printf("usage: %s filename\n", argv[0]);
		return -1;
	}
	
	ret = chmod(argv[1], S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWOTH);
	if (ret < 0)
	{
		perror("chmod");
		return -1;
	}
	
	return 0;
}

6、chown/fchown/lchown与属主修改

  • linux中有个chown命令来修改文件属主;
  • chown root 1.txt;注意要在root用户下修改;
  • chown命令是用chown API实现的;

7、umask与文件权限掩码

  • 文件掩码是linux系统中维护的一个全局设置;
  • umask用来设定系统中,新创建的文件的默认权限;
  • umask命令通过调用umask这个API来实现。
  • umask 0022,之后创建的文件都是相应互补的权限。

你可能感兴趣的:(Linux文件属性3——文件权限管理)