所属专栏:Linux学习❤️
>博主首页:初阳785❤️
>代码托管:chuyang785❤️
>感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️
>博主也会更加的努力,创作出更优质的博文!!❤️
>关注我,关注我,关注我,重要的事情说三遍!!!!!!!!❤️
我们用指令执行相应的操作的基本流程如下:
而我们的shell外壳相当于是一个中间商,是指令操作与内核进行交流的通道。
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。
而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
就比如我们成年了,都要办理身份证,而我们办理身份证的时候去的地方是公安局,由公安局向国家帮我们申请办理身份证,而这个时候我们就可抽象认为,要办理身份证的那个人就是指令操作,而公安局人员就是shell外壳,国家就是我们的操作系统。而这个时候我们能不能直接越过公安局人员直接向国家申请身份证呢?虽然说是可以的,但是你知道办理一个身份证的具体流程,以及办理身份证所需的各种材料证明吗?最重要的是去哪里可以找到国家办理身份证呢?所以这个时候公安局人员就会帮助我们一切问题,而我们只需要告诉他们我们需要办理身份证,并且公安局人员还会检查要办理身份证的这个人是不是我们国家的,是不是偷渡过来的,检查完后公安局人员就会走具体的流程办理向国家申请帮你办理身份证。等到办理完成后,由国家把身份证发送到公安局人员手里,公安局人员再联系你过来拿身份证。所以这个时候我们的公安局人员扮演了一个很重的角色。
所以shell外壳的作用就是:
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的
操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运
行出结果,通过shell解析给用户。
shell再处理指令的时候,会对指令进行一次判断,低风险或者高风险。
本质其实是一个执行起来的程序(进程)
,系统启动期间一直存在。创建一个子进程的方式让子进程执行指令。
其实shell是外壳的统称,centos下的外壳是bash。
而我们再Linux下我们看到的 其实就是我们bash这叫做命令行解释器。
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:
可以再linux系统下做任何事情,不受限制普通用户:
在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
这个是以$开头的,是普通用户
命令:su [用户名] / su - [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su
root(root可以省略),此时系统会提示输入root用户的口令
su与su - 这两个指令基本上相同,只不过su - 是以root身份重新登陆一次。
做个比方:就是假如当前用户是chuyang,然后用su root用root用户登陆,此时我们的权限就是root但是文件内容还是chuyang的。
但是如果是su - root的话就是直接登陆到了root用户了。
刚才我们创建了一个普通用户,现在我们用普通用户切换回root用户。
我们用su root切换到root用户,是要输入密码的。
sudo对指定的命令进行提权
但是我们使用普通用户是没办法访问root用户下的文件的,并且也没法访问其他普通用户的文件。而sudo指令可以给予普通用户部分root的权限,
也就是说普通用户可以拥有root的使用权限。
这个密码是当前用户的密码
,不是root的密码
,但是我们执行了sudo指令为什么他会给我们报错呢?原因也很简单,我们要使用root的权限,而且还不用输入root的密码,那我们还要root用户干嘛,直接每个普通用户都使用sudo使用root的权限。所以要使用sudo指令我们要使用root用户手动把普通用户添加到sudoers这个配置文件中
,就有点类似于root的白名单,
只有在这个白名单上的普通用户才有资格使用root的权限。而具体怎么添加我们后期的学习当中会讲解。
我们对文件的权限无非是这三个权限:文件的读权限(r),文件的写权限(w),文件的执行权限(x)。
类名 | 解释 |
---|---|
u—User(拥有者) | 文件和文件目录的所有者 |
g—Group(所属组) | 文件和文件目录的所有者所在的组的用户 |
o—Others(其他) | 其它用户 |
我们来解释一下这些属性。
首先拥有者user的话就不用过多的讲解了,就是我们我们当前用户所创建的一个文件,我们那chuyang这个用户来解释一下。就是我们在chuyang这个用户下创建一个文件,qfw这个用户能访问吗?答案是不能,应为我在chuyang这个用户下创建的文件拥有者是chuyang这个用户,其他普通用户是访问不了的。
而至于所属组,我们可以理解为我们在大学里,我们知道大学对应在各个专业,而每个专业都会分几个半,我们把同属于一个专业但是不是一个班级的学生分为一个所属组,也就是说在每个班级里,只有是同一个班级的学生才能享受到来自班级老师提供的学习文件,其他班级的学生拿不到这个学习资料。现在回到刚才的问题,是不是我在chuyang这个用户创建的文件qfw这个用户一定访问不了吗?答案肯定不是的,只要我们的qfw和chuyang这两个用户所属同一个组就可以共享其文件访问。
之所以会涉及到这些属性的问题,终归都是为了在访问文件这一块的要求,那也就是说这些属性的涉及都是为了访问文件做的铺垫,也就是访问文件的权限。
文件类型 | 所属意思 |
---|---|
d | 文件夹 |
- | 普通文件 |
l | 软链接(类似Windows的快捷方式) |
b | 块设备文件(例如硬盘、光驱等) |
p | 管道文件 |
c | 字符设备文件(例如屏幕等串口设备) |
s | 套接口文件 |
而后面的一大串字符串,三个为一组,分别对应着r(读),w(写),x(执行)权限操作:
注:这里的权限顺序都是从左到右一次是:拥有者,所属组,other
。他们的权限一次是r,w,x。
如果没有权限的话就是用“-”表示。
功能:设置文件的访问权限
格式:chmod [参数] (+/-)权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
我们的file.txt,刚开始的权限:拥有者:读写权限。所属组和other都只有读权限。
我们把上面的权限变换成我们计算机熟悉的二进制位来理解。
有权限就是1,没有权限就是0。也就是所一个所属的权限范用8进制来取值范围就是0-8。于是我们就可以用8进制的方式来更改我们的权限。
发现是可以执行的,那现在我们需改一下拥有者和所属组的权限,然后再次执行以下文件:
chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
我们先切换到root用户,这里因为我们的chuyang和qfw都还没进入root白名单,所以还无法使用sudo指令。
现在我们再次执行a.out:
会发现不会报错了,而是直接执行了。这也就再次验证了我们的匹配权限。qfw用户先跟拥有者chuyang匹配,匹配不成功跟所属组匹配,匹配成功再匹配文件权限,有x执行权限,所以就可以执行。
注:root用户无视权限直接执行: