Linux下对文件权限的理解

news2024/9/28 21:26:53

一、权限的概念

Linux 下有两种用户:超级用户( root )、普通用户。
超级用户:可以再 linux 系统下做任何事情,不受限制
普通用户:在 linux 下做有限的事情。
超级用户的命令提示符是 “#” ,普通用户的命令提示符是 “$”
 
命令 su [用户名]
 
功能 :切换用户。
例如,要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 su root root 可以省略),此时系统会提示输入 root 用户的口令。
直接 su 是切换身份但是不切换路径,想要切换到 root 目录下,我们可以输入命令: su -  。
  
当我们使用普通用户的时候,想要短暂的提升权限,但是又不想使用root用户,这时候就需要用到 sudo 命令。在需要root权限的命令前面加上一个 sudo ,就可以做到短暂提权。当然,使用sudo是需要一定操作的。在后续中会提到。
  
我们使用sudo命令的时候,会需要输入密码,这个密码输入的是我们普通用户的密码。是不是非常奇怪?使用root权限输入普通密码?这是因为由于某些操作,操作系统对我们是十分信任的。
 

二、Linux权限管理

文件的权限 = 人 + 文件属性
  

1. 文件访问者的分类(人)

文件和文件目录的所有者,拥有者:u---User
文件和文件目录的所有者所在的组的用户,所属组:g---Group
其它用户:o---Others 

为什么会存在所属组呢?

在公司如果你的领导想要查看你的成果,那么如果没有所属组的话,你就需要放开其他用户的权限,那么所有人都可以看到了,这样是很明显不合理的。


2. 文件类型和访问权限(事物属性)

a) 文件类型

d:文件夹
-:普通文件 (源文件、库文件、可执行文件、文档压缩包等)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
其中 d 和 - 两个一定要熟悉。

其中的第一个字母就代表了文件的类型。

   
在Linux下和windows下,文件的后缀差别很大, Linux中文件的类型与后缀名无关,使用后缀名仅仅是给用户做一个提示符号来使用,后缀本质其实就是文件名的一部分。
  
但是, gcc等工具可能对后缀名有要求。所以我们还是规范使用后缀为好。

   

b)基本权限

i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限

 

 这里就可以看到,前三个是拥有者的权限,中间三个是所属组的权限,后面三个是其他用户的权限。

另外,root用户不受权限的约束。


3. 文件权限值的表示方法

a)字符表示方法

b)8进制数值表示方法


4. 文件访问权限的相关设置方法

a)chmod

功能: 设置文件的访问权限
 
格式: chmod [ 参数 ] 权限 文件名
 
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:  
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

比如我们需要给拥有者(u)去掉上 w 的权限。输入:chmod u-w test2.txt 

这里就看到就已经没有了 w 的权限。如果想要去掉几个权限,字母是可以一起输入的,比如:chmod u-rwx test2.txt  

如果想要同时去掉拥有者和所属组的权限,输入:chmod u-rwx,g-rwg test2.txt  

同样的,如果想要加上权限,只需要把 - 号改成 + 号即可。

如果想要给所有人加减权限,输入:chmod a-rwx test2.txt

  
②三位8进制数字

我们修改权限的时候,还可以按照数值来修改。

例如,我们输入:chmod 666 test2.txt 

   

b)chown

功能 :修改文件的拥有者
 
格式 chown [ 参数 ] 用户名 文件名
 
注意:要有root权限才能使用这个命令。
 

c)chgrp

功能 :修改文件或目录的所属组
 
格式 chgrp [ 参数 ] 用户组名 文件名
 
常用选项 -R 递归修改文件或目录的所属组
 
注意:要有root权限才能使用这个命令。

  

除了拥有者和所属组,都是其他人,所以不需要修改其他人的命令!

d)umask

功能
查看或修改文件掩码
 
格式 umask 权限值
说明 :将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022 ,普通用户默认为0002

权限掩码:凡是在umask中出现的权限,都必须在起始权限中去掉。

例如普通用户的0002,2就是 w 权限,所以 others 组中的 w 权限就被去掉了。

 
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是 mask ,则实际创建的出来的文件权限是 : mask & ~umask
 

我们可以看到因为umask是0002的缘故,所以others是没有写的权限的。这就是掩码值的作用。 

   

单独输入 umask 则获取到掩码值。 

如果想要修改掩码值,只需要 umask 后接上想要修改的掩码值。

这时候创建的文件就是系统的默认权限了。


6. 目录的权限

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

当我们要进入一个目录的时候,我们需要什么权限?  ---- x权限

为什么系统要规定一个目录默认是777开始?因为所有的目录被创建出来,一般都要能够进入!

在目录中创建新文件,需要 w 权限,读取文件,需要 r 权限。

所以,只要有用目录的写权限,就可以删除目录中文件,不论有没有这个文件的写权限。

为了解决这个问题,Linux引入了粘滞位。


7. 粘滞位

Linux系统中有很多人的时候,我们需要在一个公共的目录下进行文件的操作。

一般公共的目录是由root来创建。

张三为什么不在李四的目录下操作呢?没有权限。

让一个公共目录,大家各自可以进行 rwx 操作,但是禁止大家互删对方的文件,我们需要给目录设置粘滞位。

那么我们怎么添加粘滞位呢?

格式:chmod +t [目录名]

当一个目录被设置为 " 粘滞位 "( chmod +t), 则该目录下的文件只能由
一、超级管理员删除(root)
二、该目录的所有者删除
三、该文件的所有者删除
 

因为公共目录是root用户的,所以添加粘滞位也是需要root用户来添加的。

当然,root用户不受粘滞位的限制。所以,root用户的密码是非常重要的,不能轻易泄露。

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

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

相关文章

【Python爬虫 • selenium】selenium4新版本自动获取驱动的常见问题

文章目录前言一、安装驱动二、使用步骤1.导入包2.生成驱动3.打开网站二、selenium闪退问题处理1. selenium版本与代码不匹配2. selenium代码异常三、代码示例1.selenium4代码示例1. Chrome2. Chromium3. Brave4. Firefox5. IE6. Edge7. Opera2.selenium3代码示例1. Chrome2. Ch…

蓄热式加热炉燃烧技术

通过阅读前辈们的一些文章,关于蓄热式加热炉燃烧技术方面进行了总结。 一个蓄热燃烧单元至少由两个烧嘴本体、两个体积紧凑的蓄热室、换向阀和与之配套的控制系统组成,即应用蓄热式 (高温空气 )燃烧技术的炉子烧嘴需成对安装,当烧嘴 A 工作时…

【云原生】K8s PSP 和 securityContext 介绍与使用

文章目录一、概述二、PodSecurityPolicy 的发展1)以前为什么需要 PodSecurityPolicy?2)现在为什么 PodSecurityPolicy 要消失?三、PSP 简单使用1)开启PSP2)示例演示1、没有PSP场景测试2、定义PSP【1】资源限…

C++中的多态(原理篇)

多态的原理 虚函数表 下面这一串代码 class A { public:virtual void func(){cout << "func1()" << endl;} private:int _a; };我们看到了a对象的大小是8bit大小&#xff0c;但是a对象里面不应该只是一个_a吗&#xff1f;当我们打开监视窗口发现 a对象…

C++STL-list的简易实现

文章目录1. list的介绍2. 迭代器的分类3. list的构造4. list的实现4.1 list的基本结构4.2 list的push_back函数4.2 list的迭代器4.2.1 operator- >4.2.2 const迭代器4.3 insert函数4.4 earse函数4.5 迭代器失效问题4.6 析构函数4.7 构造函数4.8 拷贝构造1. 传统写法2. 现代写…

【C++升级之路】第四篇:类和对象(下)

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【C学习与应用】 ✒️✒️本篇内容&#xff1a;类与对象知识汇总&#xff0c;包括初始化列表的基本概念和使用的注意事项、explicit关键字、C/C中的static成…

Python【方法和返回值(Union)联合类型】注解

什么是类型注解&#xff1a;供调用者在使用函数&#xff08;方法&#xff09;时&#xff0c;如果没有完善的文档作为参考&#xff0c;开发者不知道要给定义的【变量、方法中的函数、】传入什么数据类型&#xff0c;以免减少编译错误。有了类型注解可以让 IDE 知道了数据类型后&…

C++语法2——for、while、do-while的语法及区别

C语言语法1详情请看这两篇博客&#xff1a;&#xff08;此号为本人小号&#xff09; 四则运算及基本语法 数据类型 接下来要讲得是循环语句 for循环 基本语法&#xff1a; for(表达式1&#xff1b;表达式2&#xff1b;表达式3) {内嵌语句&#xff1b; }执行顺序&#xff1a;…

js如何计算年龄?如何创建Javascript 年龄计算器?

如何创建年龄计算器? 要构建这个项目,我们需要HTML,CSS和Javascript。 让我们来看看这个项目是如何工作的。项目由输入日期组成。用户必须单击它并选择他们的出生日期或任何所需的日期。在此之后,用户必须单击计算按钮。用户单击计算按钮后,我们会根据他们输入的日期(…

深入理解ConcurrentLinkedQueue源码

1. 概述 在我们的日常开发中&#xff0c;经常会使用队列这种数据结构&#xff0c;需要它的队尾进、队头出的特点。于是&#xff0c;Doug Lea大师设计了一个线程安全的队列ConcurrentLinkedQueue&#xff0c;它是采用链表的形式构成的。我们接下来尝试通过代码去了解其中的设计…

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法 当现场的模拟量信号波动太大,而通过硬件的方式尚无法实现平稳的信号输入时,可采用软件上的滤波进行信号处理, 本次和大家分享的即通过取多个信号值的平均值的方式实现模拟量滤波的具体方法示例,仅供大家参考…

DataNode节点下线速度优化

目录 一、节点掉线或退役 1.1区分节点掉线和节点退役的区别 1.2 如何处理节点掉线出现的各种风暴 1.2.1 Datanode的block复制 1.2.2 控制节点掉线RPC风暴的参数 二、如何快速节点下线 一、节点掉线或退役 背景&#xff1a;5台数据节点&#xff0c;存储40T数据 block数112…

高等数学(上) —— 一元积分学

文章目录Ch4.不定积分原函数F(x)F(x)F(x)原函数存在定理不定积分∫f(x)dx\int f(x)dx∫f(x)dx不定积分公式不定积分 ⇦⇨ 变上限积分&#xff1a;∫f(x)dx∫0xf(t)dt\int f(x){\rm d}x\int_0^xf(t){\rm d}t∫f(x)dx∫0x​f(t)dtCh5.定积分1.定积分定义定积分的几何意义2.定积分…

ESP32的python开发环境搭建:Thonny+MicroPython

1 Thonny安装 Thonny —— 一个面向初学者的 Python IDE。Thonny良好的支持Microbit、ESP32和树莓派等的开发. 安装下载地址&#xff1a; https://thonny.org/ 2 Micropython安装 MicroPython 是 Python 3 语言的精简实现 &#xff0c;包括Python标准库的一小部分&#xff0…

Vector - VT System - 板卡_VT8006/VT8012

由于最近不幸变为了小*人&#xff0c;因此断更了一周&#xff0c;今天稍有好转&#xff0c;就新加一块大家应该会比较感兴趣的VT板卡硬件介绍吧&#xff0c;也预示着新的开始&#xff0c;马上也要到了元旦&#xff0c;新的一年即将开始&#xff0c;提前在这里祝福大家在新的一年…

JavaPub面试宝典【第22版】

JavaPub面试宝典【第22版】 直接上干货&#xff0c;几百篇原创笔记都在这。 文章列表 &#x1f4da;最少必要面试题 Java基础Java并发入门Java容器JavaWebJVMMySQLMyBatisSpringSpringBootRedisElasticSearchKafkaZookeeperDocker缓存 &#x1f4d6;知识点总结 下面是原创…

linux 下命令

linux 下命令 Linux 是一套免费使用和自 由传播的类 Unix 操作系统&#xff0c; 是一个基于 POSIX 和 UNIX 的多用户、 多任务、 支持多线程和多 CPU 的操作系统。 它能运行主要的 UNIX 工具软件、 应用程序和网络协议。 它支持 32 位和 64 位硬件。 Linux 继承了 Unix 以网络为…

uniCloud云开发----4、uniCloud云开发进阶使用方法

uniCloud云开发进阶使用方法前言1、云对象的importObject的创建和使用(1&#xff09;创建云对象&#xff08;2&#xff09;编辑云对象&#xff08;3&#xff09;在.vue文件中调用云对象&#xff08;4&#xff09;在.vue文件中调用方法2、客户端直接连接数据库(1)直接在客户端引…

设计模式-牛刀小试02

前言 本文为datawhale2022年12月组队学习《大话设计模式》最后一次打卡任务&#xff0c;本次完成homework2。 【教程地址】https://github.com/datawhalechina/sweetalk-design-pattern 一、任务描述 1.1 背景 小李已经是一个工作一年的初级工程师了&#xff0c;他所在的公…

sqlite wal 分析

动手点关注干货不迷路sqlite 提供了一种 redo log 型事务实现&#xff0c;支持读写的并发&#xff0c;见 write-ahead log&#xff08;https://sqlite.org/wal.html&#xff09;。本文将介绍 wal 原理&#xff0c;并源码剖析 checkpoint 过程&#xff0c;同时讨论下 wal 使用中…