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

Linux命令运行原理及权限管理

目录

1.引言

2.shell命令以及运行原理

3.Linux权限

3.1Linux下的用户类型

3.2Linux权限管理

3.2.1文件访问者的分类(人)

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

3.2.3文件权限值的表示方法

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

4.总结


1.引言

      我们通常在Linux下输入命令从而使用操作系统去完成相应任务,那么命令运行的原理是什么?操作系统可以直接看懂命令吗?当然是不能的,接下来要介绍的是命令运行原理和权限:

      首先,补充一个知识点,关于Linux的大致组成结构:

      1. Linux内核(Kernel):是操作系统的核心部分,负责管理系统的资源和提供基本的功能,例如进程管理、内存管理、文件系统等。

      2. 系统库(System Libraries):提供各种函数和工具供应用程序调用,包括C标准库(libc)、数学库(libm)和网络库(libnet)等。

      3. 命令行解释器(Shell):是用户与操作系统之间的接口,可以通过命令行输入指令,控制操作系统的行为。

      4. 实用工具(Utilities):各种命令行工具,用于完成特定的任务,例如文件管理、进程管理、网络管理等。

      5. 图形用户界面(GUI):提供了更友好的用户界面,支持图像、图标和窗口等元素,用户可以通过鼠标和键盘操作来管理和使用系统。

      6. 应用程序(Applications):各种应用程序,例如文档处理、网页浏览、媒体播放等,为用户提供各种功能和服务。

了解过后,重点选取Kernel内核以及命令行解释器Shell进行讲解!


2.shell命令以及运行原理

      Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

      从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

      将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

      简单点来说:我们无法直接使用操作系统,这对于用户来说太过困难,因此需要一个媒介,充当一个助手,帮助我们使用操作系统,这个助手就是Shell,也叫命令行解释器,Shell只是一个统称,具体的存在形式有bash或sh!

这里命令行解释器Shell存在的意义有两个:

  1. 充当命令行解释器;
  2. 对于用户的非法请求,直接拦截,进而保护操作系统。

再来介绍一下命令的本质:下面的演示在XShell+root用户环境下!

演示:输入ll ../usr/bin列出所有命令

可以看到,这里列出的命令本质都是可执行文件,你输入的命令其实是运行一个可执行程序,通过命令行解释器建立起与操作系统内核Kernel的联系。


3.Linux权限

3.1Linux下的用户类型

Linux下有两种用户:超级用户(root)、普通用户:

  • 超级用户:可以再linux系统下做任何事情,不受限制

  • 普通用户:在linux下做有限的事情。

  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

当我们以root身份登录服务器后,可以进入/home查看用户信息:

因为我创建了两个普通用户,所以可以看到两个用户信息。

如果要切换用户怎么办呢?

命令:su [用户名]

功能:切换用户。

例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

补充:

  • su 直接在当前用户下切换为root 
  • su - 在当前用户下重新登陆root
  • root切换到普通用户不需要密码
  • 普通用户相互切换需要密码
  • 为执行一条指令暂时提权输入 sudo whoami 但前提是当前用户要在操作系统的受信任白名单中!

3.2Linux权限管理

3.2.1文件访问者的分类(人)

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

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

当我们输入ll 可以查看一个文件的全部信息,举例:

接下来,我们对文件名前面的所有选项进行分析:

a) 文件类型(*要记住,其他的了解即可)

  • d:文件夹*
  • -:普通文件*
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件

b)基本权限

  • 读:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • 写:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动修改目录内文件的权限
  • 执行:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • “-”表示不具有该项权限

3.2.3文件权限值的表示方法

a)字符表示方法

拿上面test.c文件举例,将九个位置三个三个分为三组,分别是:rw-,rw-,r--,依次代表拥有者,所属组,其他人权限:

  • 对于拥有者,具有r(读),w(写)的权限,没有x(执行)权限;
  • 对于所属组,具有r(读),w(写)的权限,没有x(执行)权限;
  • 对于其他人,具有r(读)的权限,没有w(写),x(执行)权限。

b)8进制数值表示方法

同一个例子分析:权限可以用二进制转八进制代表:

1 代表拥有某个权限,0 代表没有某个权限

  • 对于拥有者,二进制表示权限:110,转为八进制:6;
  • 对于所属组,二进制表示权限:110,转为八进制:6;
  • 对于其他人,二进制表示权限:100,转为八进制:4。

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

a)chmod

功能:设置文件的访问权限

格式:chmod [参数] 权限 文件名

常用选项:

  • R -> 递归修改目录文件的权限

  • 说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式:

用户表示符+/-=权限字符

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

用户符号:  

  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

演示:

②三位8进制数字

格式:chmod xxx 文件名

演示:


b)chown

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

演示:如果想要把test.c的拥有者由drw1改为drw,直接输入可以吗?

这里直接拒绝了操作,这是因为用户将一个文件给另一个用户需要征得另一个用户的同意,就像你将棒棒糖给小明需要征得小明的同意一样。

正确的做法是:普通用户输入sudo whoami 进行提权操作,前面提到过进行提权的用户必须是受信任的用户!root用户就可以直接更改拥有者了,相当于强制塞给了用户。

这里使用su登录root就可以正常更改拥有者了!


c)chgrp

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项

  • -R 递归修改文件或目录的所属组

演示:

这里同样拒绝了操作,这是因为更改所属组也需要sudo命令,进行提权操作!


d)umask

功能: 查看或修改文件掩码

格式:umask 权限值

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。这里四位数字是固定的格式:0xxx,x就代表权限二进制表示后转为八进制对应的数字。

补充:

1.默认给普通文件的起始权限其实是666,不能默认可执行,因为不是所有文件都是可以执行的
2.默认给目录文件的起始权限其实是777,不能默认不可进入,目录创建出来当然需要进入
3.凡是在umask中出现的权限,不会在最终的文件权限中出现!所以最终权限=起始权限&(~umask)

 

在工作中,通常要协作完成一个文档,因此选择在/home的上一级目录下创建一个共享文档shared进行模拟,(这个文档不可以创建到任意一个用户下,因为用户的目录权限没有x,一个用户不可能进入到另一个用户目录下)。

创建完成后,登录两个用户在目录下分别创建自己的文件,如果这时作为普通用户试图去删除另一个用户的文件,我们发现是可以删除的!这不是瞎搞吗,互删还得了,这就可以引入粘滞位了:

粘滞位:给目录设置t权限,一般是共享目录,允许用户在目录进行各自文件的增删查改,只允许文件拥有者或者root能删除文件,其他人没有权限。

演示:给shared目录加上t权限后

这时就无法互删了,顺利解决了这个问题!


4.总结

权限的一些重要知识点的总结:

  1. 文件权限:文件权限包括读(r)、写(w)和执行(x)权限。每个文件有3个权限集,分别对应文件的所有者、所属组和其他用户。通过修改文件权限,可以控制用户对文件的访问和操作。

  2. 文件所有者和所属组:每个文件都有一个所有者和一个所属组。所有者是创建或拥有文件的用户,所属组是所有者所属的用户组。文件权限可以对所有者、所属组和其他用户分别进行设置。

  3. 目录权限:目录权限和文件权限类似,也包括读(r)、写(w)和执行(x)权限。读权限允许用户列出目录中的文件,写权限允许用户在目录中创建、删除和重命名文件,执行权限允许用户进入目录。

  4. umask:umask是一个权限掩码,用于确定新创建文件和目录的默认权限。umask的值是一个三位数,表示权限的屏蔽位。通过设置umask,可以限制新创建文件和目录的默认权限。

  5. chmod命令:chmod命令用于修改文件或目录的权限。可以通过符号模式(例如+rw)或数字模式(例如777)来指定权限的修改。

  6. chown和chgrp命令:chown命令用于修改文件的所有者,chgrp命令用于修改文件的所属组。这些命令可以用于更改文件的访问权限。

- - - - - -————————————本文结束————————————- - - - - -


http://www.kler.cn/a/532227.html

相关文章:

  • Unity 2D实战小游戏开发跳跳鸟 - 计分逻辑开发
  • 自定义数据集 使用scikit-learn中SVM的包实现SVM分类
  • [蓝桥杯 2024 省 B] 好数
  • 强化学习笔记(5)——PPO
  • 【Elasticsearch】 Intervals Query
  • C++类定义中的关键字public 、protected 、private的详细介绍【定义类成员的访问权限属性和基类的成员的访问权限属性】
  • linux 进程补充
  • Acwing.基础课.排列数字(c++题解)
  • 前部分知识复习03
  • Java之类和对象
  • billd-live 一款开源、免费、技术先进的直播系统
  • ubuntu22.04(GUN)安装蓝牙驱动
  • 仿真设计|基于51单片机的光照、温湿度及PM2.5检测报警系统
  • Linux下学【MySQL】常用函数助你成为数据库大师~(配sql+实操图+案例巩固 通俗易懂版~)
  • Go语言中的函数闭包
  • 部署keepalvied+lVS(dr)高可用集群
  • 【Envi遥感图像处理】010:归一化植被指数NDVI计算方法
  • Mono里运行C#脚本40—mono_magic_trampoline函数的参数设置
  • 算法日记10:SC62求和(单调栈)(共享求解)
  • 冷链监控系统
  • 4 前置技术(下):git使用
  • ElasticStack简介及应用
  • 基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究
  • arkui-x stack叠层解决焦点变换带来的布局问题
  • 《海丰县蔡氏简介》--汕尾市海陆丰大宗蔡姓源流简介
  • 见证中国力量|暴雨服务器全面支持DeepSeek