Linux用户与文件的关系和文件掩码(umask)的作用
文章目录
- 1 前言
- 2 Linux用户与文件的关系
- 3 文件掩码(umask)
- 4 总结
1 前言
阅读本篇文章,你将了解Linux的目录结构,用户与文件的关系,以及文件掩码的作用。为了方便大家理解,本文将通过实例进行演示,建议有条件的跟着操作一下,以便加深理解。
2 Linux用户与文件的关系
用户账号分为两类:超级用户(root)和普通用户,超级用户又称为管理员用户。超级用户可以使用命令useradd创建普通用户账号。假设我们现在利用超级用户创建两个用户组A和B,然后创建4个普通用户:User1、User2、User3、User4,让User1和User2属于用户组A,User3和User4属于用户组B。创建的目录结构如图1所示。
如图2所示,对于一个文件来说,操作它的用户分为三种:文件拥有者用户(u),文件所属用户组用户(g),其它用户(o)。
不同身份的用户,对文件的操作权限不同,一般文件拥有者用户的权限最大,文件所属用户组用户次之,其它用户权限最小。图3展示的权限分为三种:读权限、写权限、执行权限。
假如User1创建一个文件test.c,那么对于test.c文件来说,User1就属于拥有者用户,User2属于用户组用户,User3和User4属于其他用户。那么不同身份的用户对文件的操作权限是怎样的呢?我们可以来实操一下,首先创建四个用户:User1、User2、User3、User4。
创建两个用户组A和B:
groupadd A
groupadd B
创建4个普通用户:User1、User2、User3、User4
useradd -g A User1
passwd User1
然后用同样的命令创建剩下的三个用户:
useradd -g A User2
passwd User2useradd -g B User3
passwd User3useradd -g B User4
passwd User4
我们来到home文件夹下,可以看到新创建的四个普通用户家目录。
接着登录User1用户,并在其家目录下创建一个文件test.c,此时对于test.c文件来说,User1就属于拥有者用户,User2属于用户组用户,User3和User4属于其他用户。
touch test.c
查看test.c的文件权限可以看到为-rw-r–r–,其中rw-是文件拥有者用户的权限,代表具有读写权限;r–是用户组用户的权限,只具备读权限;r–是其他用户的权限,也只有读权限。可以用二进制表示文件的权限为0110100100,转换为8进制表示为0644。
读者可以自行尝试登录User2或User3,观察是否可以往test.c中写入内容。新创建的文件的权限为什么是0644呢?如何控制新创建的文件权限呢?
3 文件掩码(umask)
其实我们新创建出来的普通类型文件其预设权限(又称默认权限)是0666,但最后文件的权限会变为0644,这是因为创建文件的时候还要受到文件掩码的影响。其实,实际创建的出来的文件权限是: 0666 & (~umask)。首先来查看一下文件掩码:umask
可以看到User1用户的默认文件掩码为0022,注意文件掩码是由四位8进制数字组成,第一位是预置位,一般设置为0;后3位是文件的权限。故文件最终的权限为:0666 & (~0022) = 0666 & 7755 = 0644。
不难想象,如果文件掩码为0000,那么我们创建出来的文件的权限就等于预设权限,下面对这一点进行验证:
首先修改文件掩码,命令:umask 0 //将文件掩码修改为0
创建文件main.cpp,并查看该文件的信息:
可以看到当文件掩码改为0时,我们创建出的文件权限为0666,这样对于拥有者用户、组用户、其它用户都对文件具有读写的权限,实际上这样是不合理的,一般我们不希望其他用户能够修改文件,即让其他用户不具备写的权限,文件掩码就可以实现这个功能,有了文件掩码,我们就能默认将其他用户的写的权限给限制住。换句话说,文件掩码可以让系统更安全。
4 总结
本次通过实操讲解了用户对文件的操作权限,要想理解权限,需要站在文件的角度,观察用户对文件是什么身份,不同的身份具有不同的权限,默认情况下文件拥有者用户的权限最大,文件所属用户组用户次之,其它用户权限最小,而root用户具备对文件的所有操作权限。接着讲解了文件掩码,利用文件掩码可以控制用户创建文件的默认权限。文件掩码的作用是限制不同身份用户的权限,使得系统更加安全。
相关文章:

Linux用户与文件的关系和文件掩码(umask)的作用
文章目录 1 前言2 Linux用户与文件的关系3 文件掩码(umask)4 总结 1 前言 阅读本篇文章,你将了解Linux的目录结构,用户与文件的关系,以及文件掩码的作用。为了方便大家理解,本文将通过实例进行演示…...

JS -- 正则表达式教程
1 概念 ECMAScript 通过 RegExp 类型支持正则表达式。 2 写法 2.1 类似 Perl 的简写语法: let pattern /a/g let pattern2 /a/i2.2 构造函数创建: let pattern new RegExp(a, g) let pattern new RegExp(a, i)上面两种是等价的正则表达式 3 修…...

详细介绍IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分
1、 IP 地址: 网络之间互连的协议,是由4个字节(32位二进制)组成的逻辑上的地址。 将32位二进制进行分组,分成4组,每组8位(1个字节)。【ip地址通常使用十进制表示】ip地址分成四组之后,在逻辑上,分成网络号和主机号 2…...

滚动菜单+图片ListView
目录 Fruit.java FruitAdapter MainActivity activity_main.xml fruit.xml 整体结构 Fruit.java public class Fruit {private String name;private int imageId;public Fruit(String name, int imageId) {this.name name;this.imageId imageId;}public String getNam…...

【4k】4k的webrtc播放示例
目录 使用带研发角色的账号,在app端设置下分辨率 : 4k 点播 ffplay播放看下详细的参数 使用带研发角色的账号,在app端设置下分辨率 : 4k 点播 ffplay播放看下详细的参数...

PMIC 基础知识浅析(四)
PMIC 后端研究现状: 现今针对便携式移动平台的电源管理芯片仍以传统分离型 PMIC为主。 根据后端设计的特点,传统分离型 PMIC 又可分三大类。 控制芯片与开关 MOSFET 分离型,MOSFET 外置于PCB上,芯片仅提供智能控制功能。 此类IC…...

gin+gorm增删改查目录框架
从网上找资料,发现,很多都是直接的结构 路由,后端的controller层,还有model层,都是放在了同一个main.go文件中,如果写项目的话,还得自己去拆文件,拆代码,经过查询和自己总结,下面放…...

python进阶(二)导入import 机制 | 导入import 用法 工作原理全解析
文章目录 1. 整体概念基本介绍1.1 包package1.2 模块 module 2 基本语法2.1 import直接使用2.2 from 及其用法3.1 as的用法 3 工作原理3.1 搜寻3.2 执行3.3 避免导入模块代码执行 参考《Python应该如何导入(import)模块及包》梳理 1. 整体概念基本介绍 …...

极客时间-《罗剑锋的 C++ 实战笔记》文章笔记 + 个人思考
极客时间-《罗剑锋的 C 实战笔记》文章笔记 个人思考 语言特性06 | auto/decltype:为什么要有自动类型推导? 语言特性 06 | auto/decltype:为什么要有自动类型推导? auto 在C 11 引入。 为什么说C是静态强类型语言?…...

Pytorch 对比TensorFlow 学习:Day 17-18: 循环神经网络(RNN)和LSTM
Day 17-18: 循环神经网络(RNN)和LSTM 在这两天的学习中,我专注于理解循环神经网络(RNN)和长短期记忆网络(LSTM)的基本概念,并学习了它们在处理序列数据时的应用。 1.RNN和LSTM基础…...

Java基础 - 07 Set之Set,AbstractSet
上边几篇,我们对java的List集合进行相关介绍,了解了关于List集合下的相关实现类的方法或者接口。 自本篇开始,将围绕java的Set进行介绍,也是对我java知识的巩固吧,处理业务越多,发现自己对基础知识的薄弱&…...

C++17新特性(三)新的标准库组件
1. optional 在编程时,我们经常会遇到可能会返回/传递/使用一个确定类型对象的场景。也就是说,这个对象可能有一个确定类型的值也可能没有任何值。因此,我们需要一种方法来模拟类似指针的语义:通过nullptr表示指针为空。解决方法…...

Spring Boot入门
SpringBoot介绍 什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其中“Boot”的意思就是“引导”,Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速开发 Spring应用的方式。 特点 • 嵌入的 Tomcat,…...

【LeetCode】数学精选4题
目录 1. 二进制求和(简单) 2. 两数相加(中等) 3. 两数相除(中等) 4. 字符串相乘(中等) 1. 二进制求和(简单) 从字符串的右端出发向左做加法,…...

【漏洞复现】Hikvision SPON IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)
文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 声明 请勿利用文章内的相关技术从事非法测试,由于传播…...

IDEA在重启springboot项目时没有自动重新build
IDEA在重启springboot项目时没有自动重新build 问题描述 当项目里面某些依赖或者插件更新了,target的class文件没有找到,导致不是我们需要的效果。 只能手动的清理target文件,麻烦得很 , 单体项目还好说,一次清理就…...

华为设备NAT的配置
实现内网外网地址转换 静态转换 AR1: sys int g0/0/0 ip add 192.168.10.254 24 int g0/0/1 ip add 22.33.44.55 24 //静态转换 nat static global 22.33.44.56 inside 192.168.10.1 动态转换 最多有两台主机同时访问外网 AR1: sys int g0/0/0 ip add…...

48-DOM节点,innerHTML,innerText,outerHTML,outerText,静态获取,单机click,cssText
1.DOM基础 Document Object Module,文档对象模型,window对象,document文档,都可以获取和操作 1)文档节点 2)属性节点(标签内的属性href,src) 3)文本节点(标签内的文字) 4)注释节点 5)元素节点(标签) 2.获取元素节点 2.1通过标签名获取getElementsByTagName() …...

多输入多输出 | Matlab实现基于LightGBM多输入多输出预测
多输入多输出 | Matlab实现基于LightGBM多输入多输出预测 目录 多输入多输出 | Matlab实现基于LightGBM多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于LightGBM多输入多输出预测(完整源码和数据) 1.data为数据集&a…...

【欢迎您的到来】这里是开源库get_local_info作者的付费专栏
您好, 我是带剑书生,开源库get_local_info的作者,欢迎您的到来,这里是我的付费专栏,在上一个付费专栏里,用简洁的语言,通俗的话语,帮助您更好的学习了Rust,现在将用本专栏…...

Java SE入门及基础(23)
目录 方法带参 1. 构造方法带参 案例场景 思考:以上代码存在什么问题? 2. 方法带参 方法带参语法 案例场景 思考:以上代码存在什么问题? Java SE文章参考:Java SE入门及基础知识合集-CSDN博客 方法带参 1. 构造方法带参 …...

蓝桥杯回文日期判断
思想:对于回文数的判断方法,最快的就是取其中一半的字符串长度,为s,然后将其进行翻转为s’ ,再把两者进行拼接即可保证是回文数,这样子就解决了枚举所有回文数的问题。 注意点: 要求必须是有效…...

Qt文件和目录相关操作
1.相关说明 QCoreApplication类、QFile类、QDir、QTemporaryDir类、QTemporaryFile类、QFileSystemWatcher类的相关函数 2.相关界面 3.相关代码 #include "dialog.h" #include "ui_dialog.h" #include <QFileDialog> #include <QTemporaryDir>…...

递归、搜索与回溯算法(专题一:递归)
往期文章(希望小伙伴们在看这篇文章之前,看一下往期文章) (1)递归、搜索与回溯算法(专题零:解释回溯算法中涉及到的名词)【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…...

element-ui 打包流程源码解析(下)
目录 目录结构和使用1,npm 安装1.1,完整引入1.2,按需引入 2,CDN3,国际化 接上文:element-ui 打包流程源码解析(上) 文章中提到的【上文】都指它 ↑ 目录结构和使用 我们从使用方式来…...

ChatGPT给出的前端面试考点(Vue.js)
ChatGPT给出的前端面试考点(Vue.js) 答案 1. Vue.js是什么?它的主要特点是什么? Vue.js是一个渐进式JavaScript框架,用于构建用户界面。它的主要特点包括: 数据绑定:Vue.js使用双向数据绑定&…...

ChatGPT 商业提示词攻略书
原文:ChatGPT Business Prompt Playbook 译者:飞龙 协议:CC BY-NC-SA 4.0 一、书系介绍 人工智能发展迅速。非常迅速。 所以我希望你做两件事: (1) 在 Twitter 上关注我:iamkylebalmer (2) 订阅我的免费电子邮件通…...

Notepad++运行C语言输出乱码
方法一:编码-编码字符集-中文-GB2312 这时原程序中文会变成乱码,我是重新输入中文 重新编译执行即可 缺陷:重开一个程序有中文还是会显示乱码,需要重新设置编码,比较麻烦 方法二:设置-首选项-新建-右侧编…...

深入解析 Java 方法引用:Lambda 表达式的进化之路
前言 方法引用是 Java 8 提供的一种新特性,它允许我们更简洁地传递现有方法作为参数。这项特性实际上是对 Lambda 表达式的一种补充,通过方法引用,我们可以直接引用现有方法,而无需编写完整的Lambda表达式。最近在使用方法引用的…...

MySQL作业 (3)多表查询
多表查询 1.创建student和score表2.为student表和score表增加记录3.查询student表的所有记录4.查询student表的第2条到4条记录5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息6.…...