初识Linux · 权限

news2024/11/24 23:22:39

目录

前言:

1 预备知识

2 权限

2.1 文件的基本权限

2.2 修改权限的第一种做法

2.3 修改权限的第二种做法

2.4 权限的对比

2.5 文件类型


前言:

继上文我们将常用的指令介绍的七七八八了,本文着重探索Linux文件中的权限部分,上文介绍的许多指令都是和文件挂钩的,并且有一句话说得好,Linux中一切皆文件,所以我们本文,先介绍完文件权限的预备知识,再着重介绍一下文件的权限等问题。


1 预备知识

我们输入了指令之后,有没有好奇过指令是如何运转的?难道是我们输入了指令,操作系统知道了,那么它就去操作了?显然是不现实的。

上面的叫做命令行解释器,叫做外壳程序,还有外壳程序是图形化界面。

那么什么是外壳程序呢?可以理解为shell程序,就是我们输入的一个一个的指令,但是为什么不能直接操作OS呢?

因为用户不善于直接和OS交互,并且我们要对OS做一些越界的处理,那OS会同意吗?当然不会,毕竟要保护OS的安全,所以外壳程序在一定程度上也保护了OS的安全。

这是不直接与OS交互的两个点。

那么如果申请了某种越界的行为,OS可不能坏了自己的口碑啊,所以会创建子进程,去实现这个error指令,然后报错了就是子进程的问题,反正不是操作系统的问题。

所以现在我们就知道了,OS和用户之间隔了一层外壳程序,俗称Shell,那么现在就可以引入权限的概念,当我们对文件执行了部分操作,但是权限不够,外壳程序就会驳回该指令,简称报错。


2 权限

我们了解Linux的权限的时候,我们首先思考,什么是权限呢?

比如平常的小区,要刷卡才能进吧,是因为你是张三还是李四吗?实际是因为你是这里的业主。平常的公司打卡,是因为你是你自己吗?是因为你是这里的员工。

所以权限,和你是不是你自己没有关系,和你的身份关联是比较大的。

那么什么是权限的本质呢?

我们知道权限的使用和用户的身份有关系,那么为什么凭借这个身份就可以实现某种操作呢?因为该事物具有某种属性,比如门禁,具有你有卡,我就开门的属性,以此看来,我们不妨将权限简单的总结一下:

权限 = 用户的身份 + 事物的属性。

现在引入Linux的概念。

在Linux中用户可以简单分为root用户和普通用户

root用户一般具有的权限是超级管理员,普通用户不言而喻。现在我们学一个简单的操作,如何从root 用户转为普通用户?很简单,用到指令su即可,添加普通用户使用adduser就可以了:

su + 用户名转为普通用户,root直接转过去就不用输入普通用户的密码,su转为root用户,此时输入root的密码即可。

好了,现在以普通用户来看一下文件:

我们现在已经知道的是new.txt是文件名,Aug 20 17:00是文件的创建时间或者是最近的修改时间,0是文件内容的大小,-代表这是普通文件,d代表这是目录,那么前面两个lazy 和 _lazy是啥呢?那一串rw-又是啥呢?

2.1 文件的基本权限

我们先来了解rwx,我们知道,文件一般具有的权限是读文件,r,写文件,w,还有一个是可执行权限,x

所以rw-代表可以读写,但是没有可执行权限。那有一个就可以了,为什么有多个呢?

我们现在引入,拥有者,所属组,other的概念

拥有者很好理解,是谁创建的这个目录或者文件,那么该文件就是谁的,那么什么是所属组呢?

在大公司里面,一个作业往往交给许多人做,那么他们天然就是一个组,这是所属组,other就很好理解了,other就是其他人嘛,除了拥有者和所属组的其他人都是other。

那么这下就对应了,rw-rw-r--分别对应拥有者,所属组,other,这是他们分别对应的权限,分别对该文件的权限。

我们基于权限有了简单的理解,那么是否可以尝试修改一下权限呢?

当然是可以的。

2.2 修改权限的第一种做法

修改权限使用到的指令是chmod,拥有者是u,所属组是group,other是o,为了方便观察,我们这里先将拥有者改一下即可:

可以单用,也可以连着用,但是不免会觉得有些麻烦,此时我们不妨将权限存在看为1,不存在看为0,所以rw-rw-r--对应的数字就是110110100,转换为八进制就是664,所以我们想要修改,也可以直接:

这是修改权限的第一套做法。我们可以通过u+对应的权限来修改user的权限,也可以通过数字来修改。看个人喜好,都是不错的选择。

当然了,还有一个十分牛逼的指令:

a的操作是all,全部的意思。 

2.3 修改权限的第二种做法

那么修改权限的第二种做法呢就比较离奇了,也不能这么说,可以说这种做法是一种比较残忍的做法,以该文件举例:

目前文件的权限是664,那么other,比如lazy的权限是r--,我希望lazy的权限变成rw-,但是同时又不希望修改其他other的权限,那怎么办呢?那不简单吗!我们直接让lazy变成user或group不就可以了吗:

但是呢,我们会发现是不被允许的,因为权限不够,所以我们需要短暂提权:

这里使用了sudo,表示执行这个指令的时候,我们就是root,但是实际身份还是_lazy,这就是短暂提权。这里先推荐su到root再操作,sudo存在白名单的说法,在vim会有介绍。

这里我们就可以发现lazy变成了user了,同样的,其他都是可以修改的,但是如果是普通用户都需要简单提权。

也可以同时修改两个,那么修改group是chgrp.

欸?为什么没有修改other的呢?这是因为修改了user 和 group就间接修改了other,所以不需要再次修改了。

现在我们就掌握了权限的基本理解和权限的基本修改。

2.4 权限的对比

我们既然可以修改相关的权限,那么就应该了解权限如果存在或者是如果不存在造成的影响是什么?

可以看到所有权限被禁止后,我们作为拥有者来说,甚至不能打印出这个文件的任何内容,那么我们从权限对比的角度,首先抛出一个问题:

我们要进入到一个目录,我们应该具备什么权限?

我们不妨一个一个的尝试,首先是r:

发现我们可以成功进入到该目录,但是呢,我们ls不了该目录了?这是因为文件 = 文件属性 + 文件内容,我们禁止了r,read,所以我们读不了文件的内容。

再是w:

发现可以成功进入到Linux的目录里面。

但是呢,新建文件是不被允许的,因为write属性被禁止了。

那么可以在里面删除文件,修改文件吗?

现在Linux文件夹中有一个new.txt文件。

可以发现删除文件是不被允许的,因为不能写。

同理,权限没有w了之后:

不能移动位置不能重命名,这就是w的权限。

那么还有一个x了,不用想,x的权限就是判断能不能进入到该目录:

好了,权限的基本对比我们了解部分了,现在你应该好奇,为什么文件或者目录创建的时候默认是664和775?而不是其他权限,这是因为有权限掩码的存在。

默认的权限掩码是0002,第一个0我们先不管,原本默认的文件应该是666,目录应该是777,但是掩码存在的权限新建的目录文件不能有,所以需要减去掩码,但是这里不是真正的减法,这是是和掩码取反之后与了一下,得:

最终权限 = 默认权限 & (~umask)。

为了过滤权限而存在掩码。

我们反转到目录的w权限那里去,我们现在引入一种情况,你和root吵起来了,root一气之下给你创建的文件删了,那你气不过,想删除root创建的文件,可以吗?

来我们尝试一下:

啊?居然删除了?是不是有点不可置信,这可是root创建的文件啊,我们一介草民,怎么能给人删除了呢?于是你觉得有些蹊跷,决定让两个普通账户试试:

当我们在根目录创建的时候,这么说吧,只要权限不设置,来条狗都给你删除咯。

所以我们需要粘滞位,当我们需要两个人或者多个人共享目录的时候,并且不希望被人修改,我们应该加上粘滞位,-t:

这就删除不了了。

2.5 文件类型

我们写了一个程序,打印了Hello world 。

Linux中一切皆文件,是如何识别文件的呢?Windows是通过后缀识别的,Linux可不是,不信你看:

按照我们在Windows的惯性,改了文件后缀,那么可执行程序一定是跑不了了,但是这里不一样,这里无论怎么改后缀,都是可以跑的。

但是呢,Linux是不看文件后缀,可gcc要看啊:

不是所有文件gcc都可以编译的,那么我们可以引入话题了:

可执行权限和可执行程序一样吗?

当然是不一样的,在我完成编译程序之后,这个程序可以跑,但是我取消它的x权限,我不让它跑,普通的文本文件,都没有办法完成编译,谈什么可执行的权限呢?

然后这里简单看一下就即可,我们不做过多的了解。


感谢阅读!

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

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

相关文章

docker部署postgresSQL 并做持久化

先安装docker,安装docker 方法自行寻找方法 然后安装pgsql 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres:latest运行容器 docker run -it --name postgres --privileged --restart always -e POSTGRES_PASSWORDZ6n8g4zJzC3mr…

手动与自动修复mfc140u.dll丢失的解决方法,mfc140u.dll在电脑中是什么样的存在

当您遇到“mfc140u.dll丢失”的错误时,通常意味着计算机上缺少Microsoft Foundation Class (MFC) 库的特定版本,该库是Visual Studio 2015的一部分。这种问题往往在启动某些应用程序或游戏时出现,并显示如“无法启动该程序,因为计…

可变参数模板(C++11)

这篇文章讲解的是C11的特性之一——可变参数模板,适合有一定基础的同学学习,如果是刚入门的同学可以看我过往的文章:C基础入门 可变参数模板(Variadic Templates)是C的一种高级特性,它允许你编写接受任意数…

8.20T3 无损加密(线性代数转LGV+状压dp+高维前缀和)

http://cplusoj.com/d/senior/p/NODSX2301C 对于式子: 这个神秘的线性代数形式比较难处理,但我们可以考虑其组合意义。行列式现存的可用组合意义之一就是LGV(矩阵式不太可用) 先把原先的矩阵转化为一个有向图。现在我们要构造一…

笔记本电脑无线网卡突然没有了

目录 笔记本电脑无线网卡突然没有了最优解决方案 笔记本电脑无线网卡突然没有了 记录一次笔记本无线网卡突然没有了的解决方案 显示黄色感叹号,试了几个安装驱动的软件都不行 最优解决方案 找到网卡的厂商官网,官网上下载驱动 比如我的无线网卡是Int…

【Hot100】LeetCode—146. LRU 缓存

目录 1-思路1-1 LRU知识点1-2 实现思路LRU的子数据结构① 双向链表 DLinkedNode 结点定义② 其他字段 LRU实现的方法① 初始化——LRUCache中初始化② public int get(int key) 取元素方法③ public void put(int key, int value) 存元素方法 2-实现⭐146. LRU 缓存——题解思路…

rufus制作ubantu的U盘安装介质时,rufus界面上的分区类型选什么?

rufus制作ubantu的U盘安装介质时,rufus软件界面上的分区类型选什么(如下图)? 在使用Rufus制作Ubuntu的U盘安装介质时,分区类型的选择取决于我们的计算机的引导方式。 以下是具体的选择建议: 1、查看计算机的引导方式…

JAVA设计模式之【单例模式】

1 类图 2 饿汉式单例 例如:静态块、静态成员 2.1 概念 类加载的时候就立即初始化,并且创建单例对象 2.2 优点 没有加任何的锁、执行效率比较高 2.3 缺点 类加载的时候就初始化,不管用与不用都占着空间,浪费了内存。 3 懒汉…

Java之迭代器的使用

Java之迭代器的使用 摘要基础知识List迭代器Map迭代器 摘要 本博客主要讲解容器的迭代器的使用,包括List、Set和Map等容器 基础知识 这是类的继承关系图 迭代器的原理(一开始迭代器并不指向任何有效元素): List迭代器 public class TestIterator …

VMware vSphere Client无法访问和连接ESXi虚拟主机解决思路

文章目录 前言1. 问题现象2. 问题原因3. 解决方法4. 参考文章 前言 注意 : 可以先看看参考文章那里,在回过来看 1 、 2 、3 1. 问题现象 版本:VMware vCenter Server 5.5.0 build-2442329 问题描述:用VMware vSphere Client 登录ESXI主机出…

【Linux —— 线程互斥】

Linux —— 线程互斥 1. 临界资源与临界区2. 互斥的定义3. 原子性4. 互斥量(Mutex)5. 互斥的实现示例 1. 临界资源与临界区 临界资源: 指的是多个线程或进程共享的资源,例如全局变量、文件、数据库等。由于这些资源的共享,可能会导致数据不一致或程序崩…

git commit 时发生:fatal: cannot lock HEAD ref

.git目录探析_.git文件在哪-CSDN博客https://blog.csdn.net/luofeng457/article/details/117577275 tree .git .git ├── branches ├── COMMIT_EDITMSG ├── config ├── description ├── FETCH_HEAD ├── HEAD ├── hooks │ ├── applypatch-msg.sample…

STM32的GPIO

GPIO基本控制 GPIO(General-Purpose input/output,通用输入/输出接口) 用于感知外部信号(输入模式)和控制外部设备(输出模式) 简单模块:LED,按键,蜂鸣器,温度传感器,使用一个GPIO…

qt-PLC可视化编辑器

qt-PLC可视化编辑器 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "diagramitem.h" #include "arrow.h"#include <QDebug> #include <QGraphicsScene> #include <QGraphicsSceneContextMenuEvent> #includ…

1 Kubeflow总体介绍-学习笔记

1 什么是 Kubeflow Kubeflow 是一个开源项目社区和生态系统&#xff0c;支持机器学习 (ML) 生命周期中的每个阶段 &#xff0c;并支持相关的开源 工具和框架&#xff0c;Kubeflow 使 Kubernetes 上的 AI/ML 变得简单、可移植且可扩展。 Kubeflow 都能提供模块化、可扩展的工具…

C语言第17篇

1.在C语言中,全局变量的存储类别是_________. A) static B) extern C) void D) register 提示&#xff1a;extern adj.外来的 register n.登记表&#xff0c;v.登记 提示与本题无关 2.在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变…

JimuReport 积木报表 v1.8.0 版本发布,开源可视化报表

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…

【Python】成功解决 NameError: name ‘reload‘ is not defined

【Python】成功解决 NameError: name ‘reload’ is not defined 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校…

【学习笔记】7、存储器、复杂可编程器件和现场可编程门阵列

可编程逻辑器件PLD复杂可编程逻辑器件CPLD现场可编程门阵列FPGA 7.1 只读存储器&#xff08;ROM&#xff09; 7.1.1 ROM的结构 ROM存储器 存储阵列 地址译码器 输出控制电路 存储阵列&#xff0c;由许多存储单元&#xff08;1bit&#xff09;组成。每次读出一组数据&…

HTML实现俄罗斯方块

本篇文章主要讲使用HTML、CSS和JavaScript实现一个简单的俄罗斯方块游戏&#xff0c;包含基本的游戏逻辑、行消除功能以及暂停和继续游戏的控制。 使用工具 本篇文章有用到ChatGPT-4o代码纠错&#xff0c;国内免翻且稳定&#xff0c;感兴趣的大佬试试。 传送门&#xff1a;36…