当前位置: 首页 > news >正文

Linux计算文件权限的mode和umask

文章目录

  • 文件权限
      • 文件权限的三类用户
      • 文件权限的三种类型
      • mode 的格式
      • 常见的权限设置示例
  • umask的作用
      • `umask` 的作用
      • 例子
      • 常见 `umask` 设置
  • 通过位操作计算权限
      • 解释公式的背景
      • 位操作解释
      • 具体例子


文件权限

在 Unix/Linux 系统中,文件权限通过 mode 来指定,通常是使用 chmod 命令设置的。mode 是一个八进制数,由三个部分组成,每个部分表示不同的用户组对文件的权限。

文件权限的三类用户

  1. 文件所有者(Owner)
  2. 所属组(Group)
  3. 其他用户(Others)

文件权限的三种类型

  1. 读(r):值为 4,表示可以读取文件内容。
  2. 写(w):值为 2,表示可以修改文件内容。
  3. 执行(x):值为 1,表示可以执行该文件(对于目录,表示可以进入该目录)。

mode 的格式

文件权限由三个数字组成,每个数字分别表示文件所有者、所属组和其他用户的权限。例如,chmod 755 filename 中的 755 是一个八进制数,表示:

  • 7:文件所有者(Owner)的权限,7 = 4(读) + 2(写) + 1(执行),即具有读、写、执行权限。
  • 5:所属组(Group)的权限,5 = 4(读) + 1(执行),即具有读和执行权限,没有写权限。
  • 5:其他用户(Others)的权限,5 = 4(读) + 1(执行),即具有读和执行权限,没有写权限。

常见的权限设置示例

  • chmod 777 filename:所有用户都具有读、写、执行权限。
  • chmod 644 filename:文件所有者可以读写,其他用户只能读。
  • chmod 755 filename:文件所有者可以读写执行,其他用户只能读和执行。

通过这种方式,可以灵活地为不同的用户组设置文件的权限。

Linux的open()函数也引用了这个参数:Linux系统文件IO


umask的作用

umask 是一个用于控制文件和目录默认权限的系统设置。它在创建新文件或目录时,影响文件系统的权限掩码,从而影响最终设置的权限。

umask 的作用

  1. 权限掩码umask 是一个权限掩码,用于指定在创建新文件或目录时应当“屏蔽”(即剥除)哪些权限位。它不直接设置权限,而是从默认权限中去掉一些权限。

  2. 默认权限

    • 文件:默认权限通常是 0666(读写权限,文件创建时)。
    • 目录:默认权限通常是 0777(读写执行权限,目录创建时)。
  3. umask 的工作原理

    • umask 的值是一个八进制数,用于指定应当去除的权限位。
    • 新创建文件或目录的权限 = 默认权限 - umask

例子

假设当前的 umask 值为 022,这表示屏蔽写权限(写权限是 2,因此去掉了这个权限)。以下是如何计算最终权限的过程:

  • 文件的默认权限0666

    • 去掉的权限022
    • 最终权限0666 - 022 = 0644
    • 结果:新文件的权限是 0644,即所有者具有读写权限,组和其他用户具有读权限。
  • 目录的默认权限0777

    • 去掉的权限022
    • 最终权限0777 - 022 = 0755
    • 结果:新目录的权限是 0755,即所有者具有读写执行权限,组和其他用户具有读执行权限。

常见 umask 设置

  • 022:默认的 umask 值,通常用于给文件和目录设置合适的权限,抹掉了同组的其他人和组外人的写权限
  • 002:允许同组用户写权限,但屏蔽其他用户的写权限。
  • 077:非常严格,只有所有者具有所有权限,其他用户没有权限。

通过位操作计算权限

mode & ~umask 这个公式是用来计算新创建文件或目录的最终权限的。这个公式涉及到位操作,用于在创建文件时应用 umask

解释公式的背景

  1. 默认权限

    • 文件:通常是 0666(即所有用户都具有读写权限)。
    • 目录:通常是 0777(即所有用户都具有读写执行权限)。
  2. umask

    • umask 是一个掩码,用于定义在创建文件或目录时哪些权限应该被去掉。它是以八进制表示的。
  3. 计算方法

    • 新文件或目录的最终权限 = 默认权限 - umask
    • 这个计算可以通过位操作实现:mode & ~umask

位操作解释

  • ~umask:对 umask 进行按位取反(NOT)操作,得到一个掩码,其中 umask 中的位被清零,其他位被置为1。

    • 例如,如果 umask022,其二进制表示为 000 000 010 010。取反后得到 111 111 101 101(八进制表示为 755)。
  • mode & ~umask:通过与操作将 mode 中的某些位清零,保留其他位。具体来说,这会将 umask 指定的权限位从默认权限中去掉。

    • 例如,如果 mode0666(文件默认权限),umask022,则 ~umask0755。执行 0666 & 0755 会得到 0644,这就是最终文件权限。

具体例子

假设 umask022,默认权限为 0666(文件),我们用公式 mode & ~umask 计算最终权限:

  1. umask(八进制):022

    • 二进制000 000 010 010
    • 按位取反111 111 101 101(八进制表示为 755
  2. 默认权限(文件):0666

    • 二进制110 110 110 110
  3. 计算

    • 0666 & 0755
    • 结果0644(即最终文件权限)

http://www.mrgr.cn/news/25470.html

相关文章:

  • bug是什么意思
  • MySQL学习(函数整理)
  • go 笔记
  • 【复杂系统系列(中级)】Kolmogorov复杂度——信息的无序度量【通俗理解】
  • [001-02-001]. 第07-02节:线程的创建与使用
  • 《C++初始化列表陷阱:谨慎前行,避免潜在风险》
  • 【数字集成电路与系统设计】Chisel/Scala简介与Verilog介绍
  • 【数字集成电路与系统设计】基本的组合逻辑电路
  • AI大模型全栈工程师课程笔记 - RAG 检索增强生成
  • 树莓派安装 OpenCV 教程
  • Coggle数据科学 | 小白学 RAG:Milvus 介绍与使用教程
  • 6、多线程
  • Android Studio报错: Could not find pub.devrel:easypermissions:0.3.0, 改用linux编译
  • 机器CPU突然升高的原因是什么?
  • [数据集][目标检测]脊椎检测数据集VOC+YOLO格式1137张1类别
  • 计算机网络 ---- OSI参考模型TCP/IP模型
  • rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链
  • 9月12号作业
  • Day23_0.1基础学习MATLAB学习小技巧总结(23)——句柄图形
  • Java教程:SE进阶【十万字详解】(上)