文件的存取许可权

简介: 文件的存取许可权

在介绍用于描述文件信息的结构体 stat 的时候,其成员 st_mode 值指定了属主对文件的存取许可权。所有类型的文件(目录、字符设备文件等)都有存取许可权,而不只是普通文件。每个文件都对应九种存取许可权,可将他们分为三类,如下所示:

st_mode 意义说明
S_IRUSR 所属用户可读
S_IWUSR 所属用户可写
S_IXUSR 所属用户可执行
S_IRGRP 与所属用户同组的其他用户可读
S_IWGRP 与所属用户同组的其他用户可写
S_IXGRP 与所属用户同组的其他用户可执行
S_IROTH 其他用户可读
S_IWOTH 其他用户可写
S_IXOTH 其他用户可执行


上述表格中的宏在 <sys/stat.h> 中的定义如下所示:

#define    S_IRUSR    __S_IREAD    /* Read by owner.  */
#define    S_IWUSR    __S_IWRITE    /* Write by owner.  */
#define    S_IXUSR    __S_IEXEC    /* Execute by owner.  */
/* Read, write, and execute by owner.  */
#define    S_IRWXU    (__S_IREAD|__S_IWRITE|__S_IEXEC)
#define    S_IRGRP    (S_IRUSR >> 3)    /* Read by group.  */
#define    S_IWGRP    (S_IWUSR >> 3)    /* Write by group.  */
#define    S_IXGRP    (S_IXUSR >> 3)    /* Execute by group.  */
/* Read, write, and execute by group.  */
#define    S_IRWXG    (S_IRWXU >> 3)
#define    S_IROTH    (S_IRGRP >> 3)    /* Read by others.  */
#define    S_IWOTH    (S_IWGRP >> 3)    /* Write by others.  */
#define    S_IXOTH    (S_IXGRP >> 3)    /* Execute by others.  */
/* Read, write, and execute by others.  */
#define    S_IRWXO    (S_IRWXG >> 3)点击复制复制失败已复制


提示

  1. <sys/stat.h> 的具体位置在 Ubuntu 20.04 中为: /usr/include/x86_64-linux-gnu/sys/stat.h
  2. S_IRWXUS_IRWXGS_IRWXO 为三种权限均具有的宏。


继续追踪,上述宏的原型在<bits/stat.h>中定义如下所示:

#define    __S_IREAD    0400    /* Read by owner.  */
#define    __S_IWRITE    0200    /* Write by owner.  */
#define    __S_IEXEC    0100    /* Execute by owner.  */点击复制复制失败已复制


提示

<bits/stat.h>的具体位置在 Ubuntu 20.04 中为: /usr/include/x86_64-linux-gnu/bits/stat.h


由此可以分析得出,用于表示文件权限的宏其实是八进制数,因此,如果需要定义文件的存取权限,可以采用位运算的方式进行转换,如下所示:

#define I_SRWXU S_IRUSR|S_IWUSR|S_IXUSR点击复制复制失败已复制


I_SRWXU表示用户对文件拥有可读、可写、可执行的权限,用户指的是文件所有者。如同在Windows操作系统中,管理员就是一个特殊的用户,拥有至高的权限。


进一步讨论,要打开任一类型的文件,对该名字包含的每一个目录,包括它可能隐含的当前目录,都应具有执行许可权,例如,为了打开文件/usr/include/stdio.h,需要具有对目录/usr/include执行许可权,以及对文件本身的适当许可权。


注意

对于目录来说,读许可权执行许可权的意义不相同。读许可权允许读目录,获得该目录中所有文件名的列表。要在一个目录中创建一个新文件,必须对该目录具有写许可权执行许可权。同样,删除一个文件,需要对目录具有写许可权执行许可权,而不涉及对文件本身的许可权。

目录
相关文章
|
5月前
|
Linux
39. 【Linux教程】修改文件所属关系
39. 【Linux教程】修改文件所属关系
60 0
|
存储 数据采集 传感器
带你读《数据自治》第三章数据权3.1关于数据的活动(一)
《数据自治》第三章数据权3.1关于数据的活动
带你读《数据自治》第三章数据权3.1关于数据的活动(一)
|
人工智能 数据安全/隐私保护
带你读《数据自治》第三章数据权3.3个人数据权(二)
带你读《数据自治》第三章数据权3.3个人数据权
|
存储 安全 大数据
带你读《数据自治》第三章数据权3.3个人数据权(一)
《数据自治》第三章数据权3.3个人数据权(一)
|
数据采集 数据挖掘 定位技术
带你读《数据自治》第三章数据权3.2数据的权利(一)
《数据自治》第三章数据权3.2数据的权利
|
搜索推荐 数据挖掘 定位技术
带你读《数据自治》第三章数据权3.1关于数据的活动(二)
《数据自治》第三章数据权3.1关于数据的活动(二)
|
云计算 开发者
阿里云圣诞气氛组,申请出战!
美妙的云计算和可爱的年轻人总该相遇,然后创造出一个乐趣无穷的世界。
444 0
阿里云圣诞气氛组,申请出战!
Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出?
原文 http://www.freelancer-life.cn/basic-knowledge/getafreelancer-withdraw.html February 4th, 2009 in Freelancer经验分享, 入门知识 Freelancer.com(原GAF – GetAFreelancer)作为国外知名度最高和最流行的外包项目交易站点,在我们国内也已经有了大批的使用者。
3838 0
商标与商号的区别大,难道因此引发权利冲突?
从字面上看,商标和商号就像是两兄弟,其实两者之间的差别可大了呢!不仅区别大,还经常发生冲突,今日跟随小编的脚步,一同走进商标和商号。 商标和商号的区别 第一、功能与作用不同 商标,主要是用来用来区别一个经营者的品牌或服务和其他经营者的商品或服务的标记,一个商标一般会和某些特定商品相联系。