深入浅出 Linux:Shell 运行机制与核心权限指令解析

目录

  • 前言
  • 一、shell命令以及运行原理
    • [1.1 操作系统的逻辑分类](#1.1 操作系统的逻辑分类)
    • [1.2 Shell:用户与内核的交互中介](#1.2 Shell:用户与内核的交互中介)
    • [1.3 用 "王婆说媒" 理解 Shell 与 bash 的关系](#1.3 用 “王婆说媒” 理解 Shell 与 bash 的关系)
    • [1.4 bash 的运行机制与 Shell 的安全设计](#1.4 bash 的运行机制与 Shell 的安全设计)
    • [1.5 "外壳" 设计的跨系统共性](#1.5 “外壳” 设计的跨系统共性)
  • 二、Linux权限的概念
    • [2.1 su 指令](#2.1 su 指令)
    • [2.2 sudo 指令](#2.2 sudo 指令)
  • 结语

🎬 云泽Q个人主页
🔥 专栏传送入口 : 《C语言》《数据结构》《C++》《Linux》《蓝桥杯系列

⛺️遇见安然遇见你,不负代码不负卿~


前言

大家好啊,我是云泽Q,欢迎阅读我的文章,一名热爱计算机技术的在校大学生,喜欢在课余时间做一些计算机技术的总结性文章,希望我的文章能为你解答困惑~

一、shell命令以及运行原理

1.1 操作系统的逻辑分类

操作系统在逻辑上分为两类:广义操作系统狭义操作系统

广义操作系统操作系统内核 + 应用软件的组合,就像笔记本只装裸 Windows 无法满足使用需求,必须搭配 Office、压缩软件等才能正常工作,手机的使用逻辑也是如此。

狭义操作系统 仅指操作系统内核,电脑开机时的等待过程,本质就是加载这个内核的过程。默认情况下,内核不会自动启动任何应用软件,所有应用都需要我们手动启动。

1.2 Shell:用户与内核的交互中介

人无法直接使用操作系统内核,不管是启动软件还是执行指令,本质都是让应用与内核打交道。

在 Linux 系统中,内核外部会包裹一层特殊的软件层 ------Shell(外壳) ,它的专业名称是命令行解释器

从定位上看,Shell 和 Office、压缩软件等应用软件并无区别,但作用完全不同:它专门负责接收用户的指令、分析指令、交给内核执行,再将执行结果返回给用户;同时,它还能拦截非法请求,变相保护内核安全。

1.3 用 "王婆说媒" 理解 Shell 与 bash 的关系

我们可以用一个感性的故事来理解:如果你是个闷骚且害羞的程序员,操作系统内核 就像村头的如花,而Shell就像媒婆王婆。你不好意思直接向小花表白,只能托王婆转达心意,所有沟通都通过王婆完成。

在 Linux 里,我们常用的 "王婆" 就是bash ------ 它是 Shell 外壳程序的一种,CentOS、Ubuntu 等系统默认使用的外壳程序就是 bash。而Shell是所有命令行外壳程序的统称,除此之外还有 sh、xsh 等其他种类。

在 Linux 中,我们输入的命令 / 指令也被叫做Shell 命令,因为这些指令都要通过 Shell 来解释执行。

1.4 bash 的运行机制与 Shell 的安全设计

当我们登录 Linux 系统成功后,操作系统会自动启动一个 bash 进程。bash 是用 C/C++ 编写的程序,内部是一个死循环:它首先会输出命令行提示符 (比如 [root@bite-alicloud ~]#),然后通过输入函数获取用户的指令字符串。

这里有个关键的安全设计:Shell 本身不会直接解释命令 ------ 因为一旦 Shell 崩溃,整个系统都会无法使用,所以它会通过创建子进程的方式来处理命令解释,这样就算子进程出问题,也不会影响父进程 Shell 的稳定运行。

1.5 "外壳" 设计的跨系统共性

这种 "外壳" 的设计思路并非 Linux 独有:

  • 比如 Windows 的 ** 图形界面(GUI)** 就是一种外壳,我们通过点击图标、双击盘符等操作,本质都是图形界面在帮我们和 Windows 内核沟通。
  • 再比如手机上的安卓系统,它本质也是包裹在 Linux 内核外部的图形界面外壳程序,和 Shell 的作用类似,都是用户与内核之间的交互中介。

二、Linux权限的概念

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

  • 超级用户:可以在Linux系统下做任何事情,不受限制
  • 普通用户:在Linux下做的事情有限
  • 超级用户的命令提示符是"#",普通用户的命令提示符是"$"

如果想要切换用户,切换用户有两种方式
第一种:退出再登陆

如图使用CTRL + D退出后,输入ssh yunze@公网IP即可,这里的yunze用你的普通用户用户名

接下来在弹出的窗口输入密码即可登陆

可以看到普通用户下一些操作就是受限制的,Permission denied的意思就是权限拒绝

因为/usr/bin/路径属于系统路径,是超级管理员自己新建的路径,普通用户是没有权力向这个路径下拷贝文件的

为了解决该问题,就要提出第二种切换用户的方法了

把普通账号变为超级用户(root)

2.1 su 指令

命令:su【用户名】

功能:切换用户

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

从root用户变为普通用户也不用使用su了,使用CTRL + D/exit也可以

但是可以想得到,这种做法也很局限,只限于管理员来做,因为只有管理员知道root的密码

还有一种方法可以把普通用户变为超级用户,叫做su -,下面可以看到直接使用su,虽然变为了超级用户,但是具体路径是没有改变的

使用su -之后家目录也会发生变化,所以su -的本质就是让root账号重新登陆了,不是简单的用户切换,如果在Linux当中只是单纯命令行操作,还是su用的最多,使用su -后一依旧可以使用CTRL + D退出

普通账号到普通账号的切换也可以使用su

现在在家目录下新建了一个zhangsan的账号

但是依旧要输入zhangsan的密码才能完成切换,切换为哪个用户就要输入切换用户的密码

但是管理员想切换为谁就可以切换为谁,密码也不用输入,直接无视权限

这样从普通用户切换到root用户既繁琐又很难实现,所以对于这种权限不够的问题还有另一种解决方案,即对指令进行提权,该方法不把当前用户变为超级用户,只对一条指令做提权,所有合法用户都可以做

2.2 sudo 指令

要对任何指令进行提权,给指定指令前加 sudo即可,加了 sudo 之后,指定指令就可以短暂以root权限进行执行

sudo之后依旧需要输入密码,但是此次输入的是需要提权用户的密码,且在第一次使用sudo输入密码验证之后,在用户登陆期间10 - 15分钟以内就不用二次输入密码了

默认情况下,普通账号是无法进行sudo的,不然的话,所有人都能用sudo对指令进行提权,那么权限不就形同虚设了吗


结语

相关推荐
比奇堡派星星2 小时前
linux Zram
linux·运维·服务器
bjxiaxueliang2 小时前
一文详解md5sum:在Ubuntu上构建自动化文件完整性校验工具
linux·ubuntu·自动化
EmbedLinX2 小时前
Linux 之网络通信
linux·服务器·c语言·笔记·学习
jason.zeng@15022072 小时前
jenkins踩坑指南
运维·jenkins
hweiyu002 小时前
Linux 命令:patch
linux·运维·服务器
ID_180079054732 小时前
Python调用淘宝评论API:从入门到首次采集全流程
服务器·数据库·python
Web极客码2 小时前
宝塔面板后台突然显示“IO延迟非常高”
linux·服务器·数据库
IDC02_FEIYA2 小时前
Windows资源管理器未响应怎么处理?
运维·服务器·windows
遇见火星2 小时前
Linux 服务可用性监控实战:端口、进程、接口怎么监控?
android·linux·运维