Shell运行原理及Linux权限
Posted DR5200
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell运行原理及Linux权限相关的知识,希望对你有一定的参考价值。
文章目录
Shell的运行原理
我们都知道,Window操作系统是通过图形化界面和用户进行交互的,Linux操作系统是通过命令行操作和用户进行交互的,Windows和Linux和用户的交互方式虽然不同,但在操作系统看来本质上是一样的,我们把图形化界面和命令行操作称作操作系统的 “外壳程序”
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
(1).将使用者的命令翻译给核心(kernel)处理。
(2).同时,将核心的处理结果翻译给使用者
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入C盘的操作,我们通常是双击C盘盘符,或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户
下面我们来举一个例子来帮助大家理解 shell 的作用
在一个村庄里,有着王婆(媒婆,开了一家媒婆婚介所),张三,如花,小帅,一天,张三的父亲老张跟张三说 : “张三啊,你这也老大不小的了,该找个女朋友了吧!” 张三呢,虽然内心也很渴望,但是作为一个闷骚又害羞的程序员,不知道该怎么和女生去相处,于是就对老张说 : “算了吧,我不会和女生打交道啊”,老张一听,说 : “那我给你找咱们村的王婆给你介绍介绍吧”。
过了几天,王婆来了,对张三说 : “张三啊,你对女朋友有什么要求吗?”,张三一想,说 : “我觉得如花就挺不错,王婆,你能不能去帮我说一下”,于是王婆就去了如花家,将张三的意思转告给了如花,如花听说后,心里想,这张三,身高也不高,长得也不咋的,挣钱也不算多,不行,我不同意。于是王婆又把如花不同意的消息告诉了张三。(如花听说后,心里想,张三长得又帅,身高也高,工作好,挣钱多,行,我同意了)
讲完了上面的一个小故事,可以总结一下了
如花相当于操作系统(kernel)
张三相当于用户
王婆相当于shell外壳程序
(1).为什么张三不自己去找如花呢?
(为什么用户不直接使用操作系统呢?)
因为张三不擅于和女生沟通
(因为用户不擅于使用操作系统)
(2).不管是张三给如花的消息还是如花给张三的消息都是通过王婆中间媒介传播的
故事继续
张三被拒绝以后,整天夜不能寐,心里很难受,于是又请王婆再去如花家说说,可这时如花已经有了男朋友小帅,王婆自然不肯再去
(3).如果用户传递给操作系统的指令不合法,shell外壳程序会直接对非法指令进行拦截,不会交给操作系统
故事再继续
张三是个偏执的人,而且老张还是村长,非要王婆再去如花家说,王婆心里很纠结,一方面呢,张三他爸是村长,我得给张三办事,另一方面呢,如花肯定是看不上张三,这事肯定是成不了的,这样的话,我这媒婆婚介所的名声可就不好了。怎么办呢? 于是王婆招了一个实习生,让实习生去帮张三介绍,如果事没办成,我可以把锅甩给实习生啊
(4).shell外壳程序,在系统层面上,就是一个进程,保护内核安全的同时,也要保护自身的安全,所以shell进程会创建子进程(王婆招了一个实习生),让子进程进行命令行解释。如果子进程出现任何问题,都不影响父进程Shell(实习生没把事情办成,不影响王婆的名声)。
注意: Shell只是所有外壳程序的统称,例如在centos 7当中的外壳程序名叫bash。
Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是"$"。
(1).实现用户账号的切换
语法: su 用户名
功能: 用户切换
1). 普通用户切换成超级用户,需要输入root密码
su 或 su root 都可
2). 超级用户切换成普通用户,从超级用户切换成普通用户不需要输入密码,这也说明 root 权限不受限制
su 用户名
(2).仅提升当前指令的权限
但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。
语法: sudo 指令
功能: 提升当前指令的权限。
例如,我现在要以一名普通用户的身份,修改另一个普通用户的账号密码。
但是我们又发现一个问题,我们当前的普通用户并不在 root 的信任列表里,只有把当前普通用户设置在 root 的信任列表里才可以修改其他普通用户的密码(好比 root 为群主,只有把群主信任的人设置为管理员,管理员才能获得相应的权限)
(3).如何将普通用户添加到信任列表
(1).切换成超级用户
(2).输入 vim /etc/sudoers,翻到文件末尾,找到 Allow People in group wheel to run all command
(3).添加上自己的用户名,保存并退出( :wq! )
Linux权限管理
(1).文件访问者的分类(人)
对于用户来说,权限可以将用户分为三大类:
1).文件拥有者
2).文件所属组
3).其他用户(other) : 文件拥有者和文件所属组之外的用户
注意 :
1).文件拥有者,文件所属组,其他用户是一种角色,root 用户和普通用户是具体的人,可能充当拥有者,所属组,其他用户
2).Linux中,所有的用户都要隶属于某一个组,哪怕这个组只有你一个人(组名就是用户名)
为什么要有组存在 ?
假设有以下情景,某公司有两个小组在同一台Linux服务器上做相同的开发,两个小组明显是竞争关系,你所写的代码肯定不希望被另一个小组的人看到,因此,你可以把other的权限设为- - -,但如果只有文件拥有者和other的话,和你同组的同事想要看你的代码就不可以了(因为和你同组的同事也是other),所以,需要有文件所属组,你可以把你同组的同事设为 rwx
(2).文件类型和访问权限(事物属性)
十个字符表示了文件类型和访问权限,第一个字符表示文件类型,在Linux中,文件类型和后缀名无关,在Window中,是相关的。
d:目录
-:普通文件(文本,可执行程序,库)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕,显示器等串口设备)
s:套接口文件
后面九个字符,每三个字符为一组,分别表示文件拥有者,文件所属组,其他用户对文件操作的权限
r 读取权限
w 写入权限
x 可执行权限
- 无权限
myproc.c 文件是一个普通文件,拥有者和所属组对应的权限是可读可写的,other对应的权限是可读的
(3).文件权限值的表示方法
1).字符表示方式
r - - 仅可读
- w - 仅可写
- - x 仅可执行
r w - 可读可写
r - x 可读可执行
- w x 可写可执行
r w x 可读可写可执行
- - - 无权限
2).8进制数值表示法
字符表示法 二进制 八进制数值表示法 说明
r - - 100 4 仅可读
- w - 010 2 仅可写
- - x 001 1 仅可执行
r w - 110 6 可读可写
r - x 101 5 可读可执行
- w x 011 3 可写可执行
r w x 111 7 可读可写可执行
- - - 000 0 无权限
(4).文件/目录访问权限的相关设置方法
(1).改变文件/目录的访问权限
功能: 设置文件/目录的访问权限
格式: chmod [参数] 权限 文件名/目录名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件/目录的拥有者和root才可以改变文件/目录的权限
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
②三位8进制数字
(2).改变文件/目录的拥有者和所属组
语法: chown 选项 用户名 文件名或目录名
功能: 修改文件/目录的拥有者。
常用选项: -R 递归修改目录文件的拥有者。
1). 修改文件/目录的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。
2).可以使用chown指令同时修改文件/目录的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。
语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件/目录的所属组。
常用选项: -R 递归修改目录文件的所属组。
注意: 修改文件/目录的所属组也需要进行权限提升。
(3).修改文件/目录掩码
我们在创建一个文件或目录时,都自动带有一个权限,那这个权限是怎么来的呢?
文件的默认权限是0666,目录的默认权限是0777,第一位的0与特殊权限有关,不必深究,但我们创建出来的文件权限却是 664 ,目录权限却是 775,这是为什么呢?
创建出来的文件或目录权限 = 默认权限 & (~umask)
umask
功能:查看或修改文件掩码
格式: umask 权限值
说明:凡是在umask中出现的权限位,都不能在最终权限中出现。超级用户默认掩码值为0022,普通用户默认为0002
(4).目录的权限
说完了文件,那么对于目录来说,读,写,可执行是什么意思呢 ?
注意 : 最基本的权限是可执行权限,没有可执行权限,不能进入目录,自然也无法进行读写操作
1).进入目录需要可执行权限
2).显示目录下面的内容需要读取权限
3).在目录下创建文件需要写入权限
于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?
为了解决这个问题,Linux引入了粘滞位的概念
(5).粘滞位
语法: chmod +t 目录名
功能: 给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。
注意 :
1). 当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
2).虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件
以上是关于Shell运行原理及Linux权限的主要内容,如果未能解决你的问题,请参考以下文章
Linux权限Shell命令及运行原理 | Linux权限管理 | 粘滞位
Linux权限Shell命令及运行原理 | Linux权限管理 | 粘滞位