【Linux系统】权限位(mode bits)

news2025/3/13 14:57:16

这张图是使用结构体 struct stat 中的 st_mode 字段时画的,获取表示文件的类型和权限,它是典型的 POSIX 系统调用(如 stat() 和 fstat())返回的 struct stat 结构的一部分,用于描述文件的元数据。

在 Linux 和 Unix 系统中,st_mode 是一个 16 位或 32 位的整数值,其中每一部分的位表示文件的类型、权限以及其他属性。请添加图片描述
在该图中,u_r, g_r, o_r, o_w 是文件权限的位表示,来源于文件的 权限位(mode bits),它定义了用户对文件的访问权限。这篇文章是对权限位的详细说明:

权限位(mode bits)

在 Linux 和类似的操作系统中,文件权限由 9 个基本位表示,分为三组:

  1. 用户权限(User, u): 文件所有者对文件的权限。
  2. 组权限(Group, g): 与文件所有者同组的其他用户对文件的权限。
  3. 其他权限(Others, o): 系统中其他用户对文件的权限。

每组包含 3 位:

  • r:读权限(Read)。
  • w:写权限(Write)。
  • x:执行权限(eXecute)。

位表示

权限位的映射:文件权限以二进制的方式存储在 st_mode 的后 9 位中。每个权限占 1 位:

  • 如果某位为 1,表示有该权限。
  • 如果某位为 0,表示没有该权限。

权限位的结构如下:

位:  8  7  6   5  4  3   2  1  0
权限:u_r u_w u_x  g_r g_w g_x  o_r o_w o_x
  • u_r:用户读权限(第 8 位)。
  • u_w:用户写权限(第 7 位)。
  • u_x:用户执行权限(第 6 位)。
  • g_r:组读权限(第 5 位)。
  • g_w:组写权限(第 4 位)。
  • g_x:组执行权限(第 3 位)。
  • o_r:其他读权限(第 2 位)。
  • o_w:其他写权限(第 1 位)。
  • o_x:其他执行权限(第 0 位)。

图中权限解释
如最初的图中所示(小端序排序):

  • o_w(第 1 位):其他用户有写权限。
  • o_r(第 2 位):其他用户有读权限。
  • g_r(第 5 位):组有读权限。
  • u_r(第 8 位):用户有读权限。

因此,这些位对应的权限是:

  • 用户(u):读(r)。
  • 组(g):读(r)。
  • 其他用户(o):读(r)和写(w)。

权限的存储和表示

权限以八进制或符号形式表示:

符号表示

权限可以用符号表示,如:

rw-r--rw-

# 用户(u):rw-(读、写,无执行权限)。
# 组(g):r--(只读,无写和执行权限)。
# 其他(o):rw-(读、写,无执行权限)。
八进制表示

权限也可以用八进制表示:

  • 每 3 位二进制转换为 1 位八进制数。
rw-   r--   rw-
110   100   110  -> 八进制:`644`

权限检查

权限位的检查(位操作)

在代码中,通过与操作(&)可以检查权限位是否被设置。例如:

  • 检查用户是否有读权限(u_r):
	if (st_mode & (1 << 8)) {
	    // 用户有读权限
	}
	// 1 << 8:将二进制 1 左移到第 8 位位置,从而匹配用户读权限位。
	// st_mode & (1 << 8):通过与操作检查第 8 位是否为 1。
  • 检查其他用户是否有写权限(o_w):
	if (st_mode & (1 << 1)) {
	    // 其他用户有写权限
	}

权限存储在文件的 st_mode 中,后 9 位分别对应用户、组、其他用户的读、写、执行权限。我们也可以通过位操作实现轻松检查和修改文件权限,这是操作系统权限管理的重要部分。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速上手 INFINI Console 的 TopN 指标功能

背景 在分布式搜索引擎系统&#xff08;如 Easysearch、Elasticsearch 和 OpenSearch&#xff09;中&#xff0c;性能监控至关重要。为了确保系统的高效运行和资源的合理分配&#xff0c;我们通常需要关注一段时间内关键资源的使用情况&#xff0c;特别是索引、节点和分片的内…

LIEF:用于解析和修改 ELF, PE 和MachO 格式的跨平台库

主要功能 1. 解析&#xff1a;LIEF能够解析ELF、PE和MachO格式&#xff0c;并给用户提供了友好的API来访问文件格式内部数据。 2. 修改&#xff1a;LIEF能够修改上述格式的部分数据。 3. 抽象&#xff1a;这些格式拥有一些常见特征&#xff0c;例如数据段、符号和入口…

验证码的设置

一、准备环境 首先&#xff0c;进入下载地址&#xff1a;Central Repository: cn/hutool/hutool-all/5.8.16下载jar包 二、配置环境 将下载好的jar包放到eclipse的lib目录 (这里是eclipse软件中存放jar包的目录)&#xff1a; 【WebContent-->WEB-INF-->lib】 三、基础…

FreeCAD集成gmsh源码分析

目录 gmsh模块界面获取gmsh的版本执行gmsh网格划分gmsh模块界面 这个界面是用PySide来写的,Pyside是QT的python绑定,具体代码在task_mesh_gmsh.py文件中。目前这个界面非常的捡漏,没有对接gmsh稍微高级一点的功能。界面对应的事件处理是在gmshtools.py中。这里只分析“gmsh …

忘记了PDF文件的密码,怎么办?

PDF文件可以加密&#xff0c;大家都不陌生&#xff0c;并且大家应该也都知道PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和offi…

怎么开通电信跨国网络专线服务?

随着全球化的发展&#xff0c;企业对高效稳定的跨国网络连接需求不断增长。电信跨国网络专线服务凭借其灵活性、安全性和高效性&#xff0c;成为许多企业跨国通信的优选方案。本文将为您详细介绍如何开通这一服务&#xff0c;并分享关键的注意事项&#xff0c;帮助企业更好地利…

MarkDown常用方法

标题 #空格 一级标题 ##空格 二级标题 依次类推 有序列表 操作&#xff1a;数字英文小数点(.)空格示例&#xff1a;1. list12. list2无序列表 操作&#xff1a;- 空格 或 * 空格示例&#xff1a; - list1- list2嵌套有序列表 操作&#xff1a;tab 数字 空格 示例&#xff1a; …

使用gtsam添加OrientedPlane3Factor平面约束因子

在基于地面约束的SLAM优化中&#xff0c;已知的地面信息&#xff08;如 plan.pcd 文件中的地面模型&#xff09;可以用作一个先验约束&#xff0c;以帮助优化位姿估计。具体而言&#xff0c;这个过程涉及将地面模型和每个帧的位姿结合&#xff0c;以创建一个因子模型&#xff0…

二分查找算法——搜索插入位置

一.题目描述 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 二.题目解析 如果只看题目的前半句&#xff0c;直接就用简单二分秒了。但是题目还有后半句&#xff0c;如果找不到目标值&#xff0c;则返回它应该插入的位置。 因为数组是排序的&#xff0c;所以应该…

啥!GitHub Copilot也免费使用了

文章目录 前言免费版直接修复代码多文件上下文Agent模式总结 前言 最近&#xff0c;GitHub 给开发者们带来了一个好消息&#xff1a;他们的 AI 编程助手 GitHub Copilot 现在可以免费使用了&#xff01;以前&#xff0c;每个月要花 10 美元才能享受的服务&#xff0c;现在对所…

【计算机网络】窥探计网全貌:说说计算机网络体系结构?

标签难度考察频率综合题⭐⭐⭐60% 这个问题在计算机网络知识体系中是一个比较重要的问题&#xff0c;只有完整地了解计算机网络的体系结构才能清晰地认识网络的运行原理。 在回答这个问题时&#xff0c;笔者认为有几个比较重要的点&#xff1a; 首先一定要分清楚前置条件&am…

Web开发中页面出现乱码的解决(Java Web学习笔记:需在编译时用 -encoding utf-8)

目录 1 引言2 乱码表现、原因分析及解决2.1 乱码表现2.2 原因分析2.3 解决 3 总结 1 引言 Web开发的页面出现了乱码&#xff0c;一直不愿写出来&#xff0c;因为网上的解决方案太多了。但本文的所说的页面乱码问题&#xff0c;则是与网上的大多数解决方案不一样&#xff0c;使…

Cesium小知识:pointPrimitive collection 详解

Cesium.PointPrimitiveCollection 是 Cesium 中用于高效管理和渲染大量点(points)的一个类。它允许你创建和管理大量的 PointPrimitive 实例,这些实例可以用来表示地理空间中的点数据,如传感器位置、车辆位置、兴趣点等。与直接使用 Cesium.Entity 相比,PointPrimitiveCol…

说一说mongodb组合索引的匹配规则

一、背景 有一张1000多万条记录的大表&#xff0c;需要做归档至历史表&#xff0c;出现了大量慢查询。 查询条件是 "classroomId": {$in: ["xxx", "xxx", ..... "xxx","xxx", "xxx" ] }耗时近5秒&#xff0c;且…

【论文笔记】多个大规模数据集上的SOTA绝对位姿回归方法:Reloc3r

abstract 视觉定位旨在确定查询图像相对于姿势图像数据库的相机姿势。 近年来&#xff0c;直接回归相机姿势的深度神经网络由于其快速推理能力而受到欢迎。 然而&#xff0c;现有方法很难很好地推广到新场景或提供准确的相机姿态估计。 为了解决这些问题&#xff0c;我们提出了…

谁在打响整车智能「芯」战役

汽车智能化&#xff0c;显然已经不仅是舱和驾。 尤其是对于算力和智能化来说&#xff0c;即便是已经相对成熟的新能源动力系统&#xff0c;还远未普及。本周&#xff0c;在2025年CES展上&#xff0c;英特尔联合汽车芯片初创公司—Silicon Mobility正式推出面向电动汽车动力总成…

C++ 【从零手撕,模拟实现list类】

1、基础框架 从list源代码中我们可以看到list底层为带哨兵位双向循环链表&#xff0c;从设计者的角度来看&#xff0c;我们并不知道用户在链表中存储的数据类型&#xff0c;所以在这里要使用类模板。再者&#xff0c;每一个节点都包含了前向、后向指针和存储的数据值&#xff0…

gesp(C++五级)(1)洛谷:B3941:[GESP样题 五级] 小杨的锻炼

gesp(C五级)&#xff08;1&#xff09;洛谷&#xff1a;B3941&#xff1a;[GESP样题 五级] 小杨的锻炼 题目描述 小杨的班级里共有 n n n 名同学&#xff0c;每位同学都有各自的锻炼习惯。具体来说&#xff0c;第 i i i 位同学每隔 a i a_i ai​ 天就会进行一次锻炼&#x…

【k8s】scc权限 restricted、anyuid、privileged

文章目录 概述1. 内置的scc2. OpenShift如何确定pod的scc2.1 Pod未带SCC标签的情况2.2. Pod带有SCC标签的情况 参考 概述 在OpenShift&#xff08;后文简称OCP&#xff09;中&#xff0c;很早就一个概念&#xff1a;Security Context Constraints &#xff0c;简称SCC&#xf…

高速光电探测器设计 PIN APD铟镓砷TIA放大脉冲误码测试800-1700nm

高速光电探测器PIN APD铟镓砷TIA放大脉冲误码测试800-1700nm &#xff08;对标:索雷博APD431A&#xff09; &#xff08;对标:索雷博APD431A&#xff09; &#xff08;对标:索雷博APD431A&#xff09; 规格参数: 波长范围:800-1700nm 输出带宽:DC-400MHz&#xff08;-3dB&…