linux umask 详解

1. umask 定义

        在 linux 系统中,umask 被定义在 /etc/profile 配置文件中,有一段 shell 脚本对 umask 是这么定义的。在 shell 会话输入命令:

$ cat /etc/profile        # 查看 /etc/profile 配置文件的内容

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002    # uid 大于 199,并且组名等于用户名 -gn(g:group n:name) -un(u:user n:name),即:普通用户
else
    umask 022    # root 用户的 uid = 0
fi

从以上 shell 脚本对 umask 的定义,我们可以知道:

(1)对于普通用户而言,umask 是八进制数(以数字 0 开头的数)002,这个数的二进制表示为:000,000,010。

(2)对于 root(超级用户)而言,umask 是八进制数 022,这个数用二进制表示为:000,010,010。

2. 文件和文件夹的访问权限 = mode & ~umask

        linux 系统在创建新文件夹时,会设置一个默认文件夹访问权限:mode = 0777(八进制数),这个数的二进制表示为:111,111,111。在创建新文件时,会设置一个默认的文件访问权限:mode = 0666(八进制数),这个数的二进制表示为:110,110,110。

        对于这个八进制数的二进制表达与访问权限的对应关系为:每三位为一组,从左往右第一组是拥有者(user)的访问权限、第二组是跟文件拥有者同组的用户的访问权限(group)、第三组是其他用户的访问权限(other)。每组从左往右,第一位是是否可读(1:可以,0:不可以)、第二位是是否可写(1:可以,0:不可以)、第三位是是否可执行(1:可以,0:不可以)。所以

(1)对于普通用户新创建的文件夹的访问权限为:mode & ~umask = 111,111,111 & 111,111,101 = 111,111,101,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:drwxrwxr-x。对于普通用户新创建的文件的访问权限为:mode & ~umask = 110,110,110 & 111,111,101 = 110,110,100,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:-rw-rw-r--。

(2)对于 root 用户新创建的文件夹的访问权限为:mode & ~umask = 111,111,111 & 111,101,101 = 111,101,101,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:drwxr-xr-x。对于 root 用户新创建的文件的访问权限为:mode & ~umask = 110,110,110 & 111,101,101 = 110,100,100,即对应于在 shell 会话执行命令行 $ ls l- 下显示的:-rw-r--r--。

用普通用户创建文件夹,文件验证:

用 root 用户创建文件夹,文件验证:

3. umask 是什么?

        根据以上分析,umask 是 linux 系统对文件和文件夹访问权限控制的预设值。新创建的文件、文件夹的访问权限 = mode & ~umask,默认文件夹的访问权限 mode = 0777,默认文件的访问权限 mode = 0666。默认情况下,普通用户的 umask = 002,root 用户的 umask = 022。

4. 查看当前用户的 umask

$ umask

5. 永久设置 umask

$ vim /etc/profile               // 对 umask 值进行修改

$ source /etc/profile         //刷新环境变量

6. 临时修改 umask

在 shell 会话中,$ umask 002,仅在当前 shell 会话中有效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

预测赢家(力扣)dfs + 备忘录 JAVA

给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。 玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0]…

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.

在 centos 7 系统上,使用常规命令:systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误: Failed to start mysqld.service: Unit not found. 根据所报错误,在网上搜罗了一圈,未果&#x…

2023-08-05——JVM 栈

栈 stack 栈:数据结构 程序数据结构算法 栈:先进后出,后进先出 好比一个:桶 队列:先进先出(FIFO :First Input First Out) 好比一个:管道 栈:喝多了吐。队列…

STM32入门学习之独立看门狗(IWDG)

1.STM32的独立看门狗是一个具有独立时钟的片上外设。通常,为了防止程序卡死,可以设置看门狗定时复位。当看看门狗被使能之后,会按初始化时设置的计数值进行计数。当根据计数值计数的倒数时间为0时,便会自动复位程序,即…

STM32F103——GPIO八种工作模式

目录 1、GPIO 基本结构分析 2、GPIO 八种工作模式 2.1 输入浮空 2.2 输入上拉 2.3 输入下拉 2.4 模拟功能 2.5 开漏输出 2.6 开漏式复用功能 2.7 推挽输出 2.8 推挽式复用功能 3、GPIO 八种工作模式特点及应用 1、GPIO 基本结构分析 STM32F103的 GPIO 工作有八种…

iOS 实现图片高斯模糊效果

效果图 用到了 UIVisualEffectView 实现代码 - (UIVisualEffectView *)bgEffectView{if(!_bgEffectView){UIBlurEffect *blur [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];_bgEffectView [[UIVisualEffectView alloc] initWithEffect:blur];}return _bgEffect…

自适应变异麻雀搜索算法及其Matlab实现

麻雀搜索算法( sparrow search algorithm,SSA) 是2020 年新提出的一种元启发式算法[1],它是受麻雀种群的觅食和反捕食行为启发,将搜索群体分为发现者、加入者和侦察者 3 部分,其相互分工寻找最优值,通过 19 个标准测试…

适配器模式:将不兼容的接口转换为可兼容的接口

适配器模式:将不兼容的接口转换为可兼容的接口 什么是适配器模式? 适配器模式是一种结构型设计模式,用于将一个类的接口转换为客户端所期望的另一个接口。它允许不兼容的类能够合作,使得原本由于接口不匹配而无法工作的类能够一…

计算机网络(8) --- IP与IP协议

计算机网络(7) --- UDP协议和TCP协议_哈里沃克的博客-CSDN博客UDP协议和TCP协议https://blog.csdn.net/m0_63488627/article/details/132125374?spm1001.2014.3001.5501 目录 1.IP与IP协议 IP作用 协议​编辑 2.网段划分 DHCP划分 CIDR划分 特殊…

Python web实战之细说Django的中间件

🔑 关键词:Python Web 开发、Django、中间件 今天分享Python Web开发中的一个重要成员:Django的中间件。介绍中间件的概念、作用及其在实战中的应用。 1 什么是中间件 在Python Web开发中,中间件(Middleware&#xff…

git使用(常见用法)

一.下载git git官方下载跳转 安装简单,有手就行 二. git的简单使用 1. 连接远程仓库 #初始化 git init #配置账户 git config --global user.name “输入你的用户名” git config --global user.email “输入你的邮箱” git config --list #--q退出 #配置验证邮箱 ssh-key…

大模型在金融医疗、生命系统和物理仿真领域的创新应用探索

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 在当今迅速发展的科技领域,大模型技术正日益成为金融医疗、生命系统和物理仿真等领域中的重要工具。2023年6月16日,AI TIME举办的青年科学家大模型专场活动邀请了国防科技大学理学院数学…

Linux下C语言调用libcurl库下载文件到本地

一、项目介绍 当前文章介绍如何使用C语言调用libcurl库在Linux(Ubuntu)操作系统下实现网络文件下载功能。 libcurl是一个开源的跨平台网络传输库,用于在C和C等编程语言中实现各种网络通信协议的客户端功能。它支持多种协议,包括…

线程概念linux

何为线程: 线程是程序中负责执行的单位,它可以被看作是进程的一部分,是进程的子任务。线程与进程的区别在于,进程是一个资源单位,而线程是进程的一部分,它只有栈这个独立的资源,其他资源如代码…

【数据结构与算法】十大经典排序算法-快速排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…

AI Chat 设计模式:11. 状态模式

本文是该系列的第十一篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 你知道状态模式吗A.1Q.2 它与有限状态机有什么联系吗?A.2Q.3 知道了&…

Redis—持久化

这里写目录标题 AOF三种写回策略写回策略的优缺点AOF 重写机制AOF后台重写AOF优缺点使用命令 RDBRDB 持久化的工作原理执行快照时,数据能被修改吗RDB 持久化的优点RDB 持久化的缺点 混合持久化大key对持久化的影响 AOF 保存写操作命令到日志的持久化方式&#xff0…

[LeetCode - Python] 11.乘最多水的容器(Medium);26. 删除有序数组中的重复项(Easy)

1.题目: 11.乘最多水的容器(Medium) 1.代码 1.普通双指针对撞 贪心算法 class Solution:def maxArea(self, height: List[int]) -> int:# 对撞双指针# 对比记录最大面积,并移动短板,重新计算;left,…

Netty:ChannelHandler的两个生命周期监听事件方法:handlerAdded 和 handlerRemoved

说明 io.netty.channel.ChannelHandler有两个生命周期监听事件方法: handlerAdded(ChannelHandlerContext ctx):当ChannelHandler被添加到实际的上下文、并且已经准备就绪等待处理事件的时候被调用。 handlerRemoved(ChannelHandlerContext ctx)&#…

【云原生•监控】基于Prometheus实现自定义指标弹性伸缩(HPA)

【云原生•监控】基于Prometheus实现自定义指标弹性伸缩(HPA) 什么是弹性伸缩 「Autoscaling即弹性伸缩,是Kubernetes中的一种非常核心的功能,它可以根据给定的指标(例如 CPU 或内存)自动缩放Pod副本,从而可以更好地管…