一、shell 命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。
而是通过kernel的 外壳程序,也就是所谓的 shell,来与kernel沟通。
shell 是什么?
shell 是包裹在操作系统外部的软件层,所以形象的称之为 外壳程序。
而从技术角度,Shell的最简单定义是:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。
同时,将核心(kernel)的处理结果翻译给使用者。
以上说明,我们可以用这幅图来理解:
那么我们如何理解 shell ?
我们理解 shell 分为两个层面,理性理解 和 感性理解。
理性理解:
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
如果shell 接受到非法指令,可能会直接拦截,不会让操作系统执行指令,从而达到保护操作系统的目的。
为了防止用户的非法指令导致 shell 自身崩溃,shell 一般都不会去执行对应的指令,而是让子进程去执行。
感性理解:
可能,理性理解比较生涩,我们就用一个小故事来感性讲解它们之间的关系:
人物简介:
张三:地主家的傻儿子,情窦初开的羞涩码农,年薪30万+,有房有车有存款,不会和女生交流,从小暗恋如花。
如花:张三的暗恋对象,心系李四,觉得张三是个二愣子,没有一点好感。
李四:如花的男朋友,两人经常一起看电视。
王婆:张家村知名红娘,说媒无一败绩,人称张家村小月老。
村长:又名张老三,是张三和蔼可亲的村长父亲,全村首富,在张家村一手遮天。
故事开始:
从前有个人叫张三,张三从小就沉迷于编程,在大学毕业后,他也拿到了一份不错的 offer 30w+。但是张三到现在还没有谈过恋爱,于是想起了在家乡的如花,感觉自己十分想念家乡。由于强烈的思乡之情,张三回到了张家村。
张三的父亲是全村首富,是村长,权势很大。张三找了村东头的王婆帮自己和如花说一下媒。张三告诉王婆自己的需求:让如花接受自己,和如花谈恋爱。王婆知道了张三的需求,跑去找如花。
王婆来到了如花的家,和如花说:“如花呀,我们那个村长的儿子张三对你有些意思,人家年薪30w,有房有车有存款,你考虑考虑?”如花想起小时候有个暗恋他的二傻子张三,立马起了鸡皮疙瘩,和王婆说,我对张三没感觉,我们不合适。
王婆接收到信息后,回去和张三说,如花呢觉得你挺好,但是你俩不合适,要不你换个。张三坚持说我就要如花,王婆拗不过你,更拗不过你的村长父亲。于是,王婆就又去如花家门口,还没到呢,就远远的看到李四和如花在看电视,李四和如花的家长也在聊天,到了谈婚论嫁的地步了。于是王婆就折返回张三家,直接和张三说,你和如花真的不适合,如花不可能和你有交际了,你还是打消这个念头吧!
但是张三没有放弃,王婆不想给他说媒,但是害怕张三的村长父亲。自己不想给张三说媒,但是没办法。我知道这个媒事说不成还要给他办,一两次失败没有影响,但是说媒次数多了就不好了。那王婆的月老会所就受到影响了。说不成媒,还会影响自己的口碑,划不来。
王婆决定招聘实习生。有一天,村长又叫王婆去给张三说媒,王婆没去,她派了一个实习生A去。这时成功不成功已经不重要了,反正王婆自己没去。这样的原因是因为说砸了不是王婆干的,自己不会收到影响,就算失败了,王婆还可以换一个实习生B过去。这样不会影响到自己,王婆在这样的方法之下,以后别人都找王婆说媒的时候,都会排实习生过去做王婆做的工作。
听完这个故事,我们也可以大致猜出它们扮演的角色:张三是 用户,王婆是 shell,如花是 操作系统。
案例重讲解:
张三(用户)把自己的需求给 王婆(shell) ,王婆(shell) 问 如花(操作系统) ,考虑是否和张三谈恋爱就是在 执行用户的指令。如花不考虑张三,就是类似于禁止访问或程序运行失败,最后王婆将结果反馈给张三,就是把 shell 把结果返回给用户 。
第二次,王婆看到如花心有所属后没有再去找如花,就是 shell指令为了保护操作系统而拦截了非法请求。
王婆聘请实习生,让实习生去说媒,就是 shell在执行命令的时候会创建子进程来执行。
通过两种理解后,我们总结一下:shell 是外壳程序,包裹在操作系统外层的软件层,为命令行解释/操作解释,将用户的操作解释交给操作系统,让操作系统执行,执行完毕,将结果经过shell再传递给用户。
补充:
如果我们在终端输入 ls /usr/bin/bash -a
:
[lx@VM-4-3-centos ~]$ ls /usr/bin/bash -a /usr/bin/bash
之前使用ls /usr/bin/bash -a
是,显示的并不是shell而是bash,bash也是一种外壳程序。对于它们两个我们可以把它理解为 bash
是王婆,但是 shell
是媒婆。bash是 centos
上的外壳程序,而 shell
是 外壳程序 的统称。
二、Linux的用户权限
1、权限概念引入
生活中, 权限处处存在。比如爱奇艺,有些视频是vip才能看的;打游戏的时候,有些皮肤是需要钱买的,这些都是对人的约束和限制。
有时访问的对象天然可能没有这种“属性”。比如我想在看小说的时候,在番茄小说上和 visual studio 2022上一样写代码,这是不可能的。因为没有这种功能,应用上没有这一层属性。
所以我们基本可以得出 权限 = 人 + 事物属性,这一结论。
了解了基本概念,我们开始讲解 Linux 上的权限。
2、用户分类
Linux上,有两种用户:root(超级用户) 和 普通用户。
root(超级用户):可以在linux下做任何事情,不受权限约束,且一台机器上只有一个root用户。
普通用户:在Linux下做有限的事情,可以有多个普通用户。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
3、用户切换
命令:su 用户名
功能:切换用户
对于 root用户来说,使用 su 普通用户
可以直接切换到普通用户:
但是对于普通用户来说,使用 su
指令时,会要求输入 root 用户的密码:
而对于 普通用户 切换到 超级用户 还有两种方式:
su
:从普通用户切换到超级用户,所处工作目录不变化,只单纯地进行身份变化。su -
:从普通用户切换到超级用户,会改变工作目录
对于 su:
对于 su -:
注:如果切换用户后想要退出,可以按 ctrl + d
退出,回到之前的用户。
4、用户提权
使用普通用户时,有时会因为权限不够,而导致某条指令无法执行。
假如我用 lx 用户创建一个文件,然后切换到 root 用户后,写入内容并减权,切回 lx 用户发现无法查看文件:
直接就出现了报错:Permission denied,意思是权限被拒绝。
面对这种情况可以 单条指令进行暂时提权:
对于提权就要用到 sudo 指令,但是这个需要配置一下,不会配置的同学可以跳转到这篇博客。
sudo 指令是 让普通用户使用单条指令时暂时拥有 root 用户的权限,使用 sudo 命令后需要输入 当前普通用户的密码:
注:sudo 的存活期一般为五分钟,五分钟内再次使用 sudo 指令无需输入密码。
埋下伏笔:sudo输的是普通用户的密码,那么我想要加权只要输自己的密码就好了,那么root是不是形同虚设?这个问题在以后的文章中会提及,大家可以思考一下。