shell的介绍以及Linux权限的讲解

Linux系统
205
0
0
2024-07-10

1 shell命令以及运行原理

1.1 shell命令行的概念

大家在以前的学习中可能会有一个固态的印象: 一台计算机的大概分层为下图 也就是说人可以直接调用计算机的操作系统,但真的是这样吗? 答案是否定的!

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

我们举一个例子: 其实用户就是一个大龄未婚的小伙子,他现在看上了一个如花似玉的姑娘(也就是操作系统),想找他做老婆(用户的需求),但是不好意思去找姑娘,于是就到村里找了个王阿姨(shell)去说媒,这就很好理解了吧

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含: 1 将使用者的命令翻译给核心(kernel)处理 2 同时,将核心的处理结果翻译给使用者

window系统中的图形界面就是一个shell程序,我们点击图标从而完成相应的需求,但是Linux中,shell主要是对指令进行解析,然后交给kernal,反馈的结果通过kernal运行出结果,通过shell解析给用户

1.2 shell外壳程序的意义

那么问题来了,为什么不直接让用户使用我们的操作系统呢?这样不是更方便吗?

这是因为如果让用户直接访问操作系统,它的成本是很高的,并且犯错率也很高,容易出现很多差错,还不如让shell在中间进行传递,降低成本的同时提高系统的准确率

1 是用户和操作系统交互中间的软件层 2 一定程度上可以保护操作系统

2 Linux权限

2.1 Linux权限的概念

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

这也从侧面反映了Linux操作系统是多用户操作系统,windows也是

从名字上就能看出来哪个用户的权限大,root在Linux系统中只能用无所不能来形容,就这么说吧,root就像是一个古代的皇帝,其他普通用户就是各个地方的亲王,每年都要上贡,但是在自己管辖的区域有一定的权力

我们可以用指令su来切换用户: 但是需要密码

su 【用户名】

例如:

指令exit可以用来切换到上一次所使用的用户:

2.2 Linux权限管理
2.2.1 文件访问者的分类(人)

文件的访问者一共可以分为三种:

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

例如: 下图中的文件的拥有者和所属组都是root 而其他用户就是说操作系统内其他的普通用户

2.2.2 文件权限值的表示方法

r代表可读,w代表可写,x代表可执行

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

文件的权限是用来限制访问的,权限值可以分为两种方法: 字符表示法:

八进制表示法:

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

其实每个文件访问者对于各个文件其实都有一定的访问权限

我们先来了解一下文件类型

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

为了大家更好地理解上图,请看具体的例子:

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

chmod功能: 设置文件的访问权限 格式: chmod [用户] +/- 权限 文件名

这里大家要注意一个点: 只有文件的拥有者和root才可以改变文件的权限!

各个字符表示的意思如下:

+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:   
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

例如: 下图中的文件:

我需要给mytest2改权限:

chmod u+x mytest2  给拥有者加上可执行权限
chmod g+x mytest2 给mytest2文件所属组用户加上可执行权限
chmod o+x mytest2 给其他用户加上可执行权限
chmod a+x mytest2 给所有用户加上可执行权限

此外还有一种八进制的方式: 例如:

chmod 664 mytest2  
chmod 640 mytest2

chown功能: 修改文件的拥有者 格式: chown [参数] 用户名 文件名

例如:

chown root mytest2   将mytest2的拥有者改为root

可以看到,改变拥有者后jh变成了 root

chgrp功能: 修改文件或目录的所属组 格式: chgrp [参数] 用户组名 文件名

例如:

chgrp root mytest2  将mytest2的所属组改为root

但是大家有没有发现: chown和chgrp我在这两个指令之前加入了一个sudo,这是为什么呢? 实际上也可以切换为root来执行这个指令,但是为了方便,我将jh这个普通用户放入了我的信任列表里,至于怎么放,稍后解答!

umask

功能: 查看或修改文件掩码 新建文件默认权限=0666 新建目录默认权限=0777

前面的0不用管,默认第一位都是0,文件夹666就是都没有执行权限,目录777就是三个所有权限都有,我们来验证一下啊: 我们新建了一个文件夹3_20,一个文件3_20_test,这么他们的访问权限和我们默认生成制定的规则不一样呢?

**原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: **

mask & ~umask

umask我们可以叫它权限掩码

那么我们可以查看我们当前系统的umask,也可以设置:

umask  查看系统的权限掩码值

umask 0003  修改权限掩码值

2.3 file指令

功能说明: 辨识文件类型。 语法: file [选项] 文件或目录…

常用选项:

-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。

例如:

file 3_20  

使用 sudo分配权限 想使用sudo指令,我们首先要将当前的用户加入信任列表: 我们需要用vim指令打开一个文件进行修改:

vim /etc/sudoers

至于如何修改,我们下篇博文在做讲解,因为本篇博文还有未涉及到的知识

然后我们就可以调用sudo分配权限了

2.4 目录的权限

在目录中各种权限的解释如下: 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

那么我们就有一个问题出现了: 我们有一个需要注意的点: 一个文件是否能被删除取决于这个文件所在的目录

那么也就是说,只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限,但是这明显有问题啊 我创建的文件,这么情敌还能删除掉我的文件呢?

为了解决这个问题: 就引出了粘滞位!

2.5 粘滞位

当一个目录被设置为**“粘滞位”(用chmod +t)**,则该目录下的文件只能由: 一、超级管理员删除 二、该目录的所有者删除 三、该文件的所有者删除

例如:

chmod o+t yw_test  

可以看到other用户的可执行权限变成了t,不能删除它

此外,粘滞位大家要注意啊: 1 粘滞位只能给目录设置,文件不能 2 粘滞位设置后一般不能被取消

2.6 权限的总结

1 目录的可执行权限是表示你可否在目录下执行命令。 2 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件) 3 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读 权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档

好了,今天的分享到这里就结束了,感谢大家的支持!