0


【Linux·克莱因计划】Shell外壳程序与文件权限操作

Hi!我是Duoni

9a01494bad724601826b5c5caabf6392.png

目录


一、Shell命令及运行原理

🍊Shell是什么?

提到Shell,可能名字无比陌生,但在Linux系统中,我们的操作时刻离不开它。

在生活角度打个比方:

Linux操作系统好比一本晦涩难懂的外文名著,但我们又想要从中吸收到点营养,怎么办呢?这时候如果使用翻译软件或许是不二选择,所以Shell外壳工具就好比那翻译软件,使我们能对它了解一二。

Linux操作系统是一个十分庞大且复杂的结构,我们要操作它,必须要借助Shell(命令解释器),使用它接收我们的指令再反馈给Linux核心进行处理,Linux又将执行结果反馈给Shell程序,最后,Shell再把执行结果对我们可视化的进行展现。

再看,windows中的图形操作界面(Windows GUI)也可以称为Shell“外壳”程序,我们的每一次点击都由图形操作界面接收,再反馈给windows系统处理。总结:Shell就是帮助我们与操作系统建立交互的一个媒介。

f72e488c494447518533b37ff6a3b452.png


🍊能否绕开Shell调用操作系统

答案是可以的

Shell程序是为我们便利性的提供帮助,并不是与操作系统连接的唯一通道。但我们要想直接调用操作系统是难度巨大的。

试想着操作系统管理着电脑上大大小小的硬件,进而根据用户指令再实现大大小小的功能。

就拿音响播放功能为例:

我们直接调用操作系统势必得先找到音响硬件的物理地址,再进行二进制的指令操作,但事实是:除了操作系统知道物理地址在何处外,无人知晓。所以直接使用操作系统是困难的。

尚且,操作系统出于安全、稳定性考虑,也不希望你直接对它进行操作。


🍊Shell外壳程序的意义

1、外壳程序是用户与操作系统交互的中间软件层。

2、外壳程序在一定程度上起到了保护操作系统的作用。

(体现在:如果用户有意或无意下达对操作系统有损的指令,外壳程序会主动阻断。)


🍊查看外壳程序

在Xshell中,我们输入指令:echo $BASH。就可以查看我们所使用的外壳程序。

f1ec1a59734b498f982e23fea61e68b7.png

输入:bash -al,可查看外壳程序子程序及文件。

94237b9cf5e746aabf205de85eabe195.png


🍊浅解杂谈

1、外壳程序其实有点像我们所写的死循环程序,不断地循环读取指令,循环处理指令。

2、Shell外壳程序其实是一切外壳程序的统称。

(比如:黄豆、黑豆、荷兰豆,都是豆类)


二、权限

Linux系统中,权限的作用在于划分不同用户的可操作范围。

就好比:群主、管理员可以进行踢人等核心操作,而群成员只能进行发言等常规操作。

🍊Linux系统下的两种用户

1、超级用户(root):可以在Linux系统下操作所有的可执行项,做任何事情。系统下root用户只能有一个(群主)。

2、普通用户(user):只可以操作权限允许内的部分操作,被限制。系统下可以有多个普通用户(群成员)。

超级用户的指令提示符是:**'#'**

25685abaa21b47bbb2c55c16f6c73afb.png

普通用户的指令提示符是:**'$'**

1b29e7a3385c4de1b7dc30035a234639.png


🍊用户切换

用户切换指令:su

指令功能:对Linux系统下已存在的用户进行切换。

1、超级用户切换指令:su -

79e2db05afa24835b4503945c62b5487.png

2、普通用户切换指令:su[name]->(name为用户名)

cd1ed94a6f8c41e2b1aa99a18bf1fc79.png

附:如果你是root用户,那么你可以切换名下所有的普通用户,且不需要验证密码。但如果普通用户想要切换成root或user用户,则需要进行密码验证(对方用户)。

e6e8846ed26d4fabb703b7b143c0a2e0.png


🍊用户权限与文件权限的关系

权限的大小依托于用户的类型,但用户对文件的操作也依托与文件的基本属性。

打个比方:

假如你是超级用户,你想要文件播放在线电影,但文件并没有这个功能,所以你的要求并不会被实现,尽管你是超级用户。

tips:为什么是文件属性呢?

因为在Linux系统下,一切皆文件!

附:什么是文件权限呢?

其实这个概念是文件属性的抽象化,就是文件内部是否有达成用户某一指令的基本条件(功能)。

小结:了解完二者的关系后,我们可以总结为:权限 = 人(用户)+ 文件属性。


🍊文件权限的认识

输入指令:ll,显示当前用户下的所有文件。

cb94774fa49f49e8a9a54c651d510af1.png

在解析文件权限前,我们再结合以上小结,知道了权限是由:人与文件属性共同构成的,那么这里的人具体能细分为哪些类型呢?

249efa28df404f269a64900cb93c5ff2.png

如展开图:

第二大列是:拥有者,就是哪一个用户下创建的,属于谁。

第三大列是:所属组,所谓的组,也可以理解为“群”,每一个拥有者(用户)都可以建立组,而组内可以添加多个用户,协同操作。

其次是:other(其他),如果此用户既不是拥有者,也不是所属组成员,那么就可以称他为other,这一项系统不展示。

系统下不会记录other,但其会分辨在用户进行文件操作时,他的身份是否属于拥有者或所属组,如果不是,那么便可判定是other。


接下来,我们再回过头看文件属性,与人(用户)所对应的关系。

文件显示的第一列第一个字符表示文件的类型。

tips:

(1)、Linux系统下不以文件后缀表示文件类型。(例:file.txt)

(2)、'-'表示普通文件,'d'表示目录文件,'p'管道文件,'c'字符文件。

98fab408c1ad4f3b9c185a1d7663248d.png

这一段字符串中,第一列表示文件类型,后面三列分别为:拥有者(owner)、所属组(grp)、other,每个都对应着三个字符。

d6528606b579472db6baef82b1a12803.png

这三个字符分别为:**'r'、'w'、'x'**,对应着“读、写、执行”三个权限。

1、'r'表示文件中读的权限,若存在'r'字符,即说明可被读,为'-'则反之。

2、'w'表示文件中写的权限,若存在'w'字符,即说明可写,为'-'则反之。

3、'x'表示文件中执行的权限,若存在'r'字符,即说明可被执行,为'-'则反之。

比如:

第一个文件类型为:普通文件。拥有者能够读写文件,但不能执行文件;所属组能够读文件,不可以写、执行文件;other能够读文件,不可以写、执行文件。


三、权限操作

熟悉完文件属性及人(用户)的三种类型后,我们能够知道,权限的构成是二者紧密联系而实现的,能够形成灵活的权限分配。

🍊如何进行文件权限操作

使用指令:chmod (操作对象)+or-(指定权限)

指令功能:对不同用户类型进行添加或删除权限

演示:

当前路径下创建一个名为:bat.txt的普通文件。

9b59a0d10a034dc0b3a1d2ccb0a70064.png

此时它的类型是普通文件,拥有者为:root,所属组为:root;拥有者有读写权限,没有执行权限;所属组与other有读权限,没有写与执行权限。

3448b5141f4a417f97b46a9a8cb74197.png

现在我要给所属组添加一个写文件的权限,输入指令:chmod g+w bat.txt

df698474a12844bc92d52b69adc86c43.png

此时,所属组便有了写文件的权限。

b8a75ff87a0d42569f2ad160e2c5e964.png

那么此时要删除拥有者的读权限,并添加other的执行权限要怎么做?

输入指令:chmod u-r,o+x bat.txt

a363684d6e9147dea456c4af5549d00c.png

修改权限完毕。

4aababa2c6c1478287585692a57a203f.png

tips:

1、三个用户类型简写为“u(拥有者)、 g(所属组)、o(other)”。

2、若要添加权限,则‘+’对应权限,否则反之。

3、如果要给所有用户类型都添加或删除权限,则这么操作:chmod a(+or-)rwx bat.txt,其中'a'代表all全部的意思。


🍊权限遐想

1、若文件中所有权限都被关闭,root用户能够进行操作吗?

试验:

将bat.txt文件中的所有用户类型的权限都关闭。

输入指令:chmod a-rwx bat.txt

e1de592022d149e28bc22d34547eb3d6.png

此时权限已经被全部关闭

b8526a863d4e4b78a172fe71a876476c.png

使用root用户在bat.txt文件写入“Hello Linux”,并进行访问。

c20de27b3c814532b376b27f97809896.png

事实证明,root用户能够无视权限束缚,但普通用户不能如此。


🍊如何修改文件拥有者

指令:sudo chown(拥有者) XXX(目标用户) bat.txt

功能:更改拥有者

注意:此操作必须要在root权限下执行,否则会报错。


🍊普通用户怎么修改文件拥有者

普通用户要想修改拥有者身份,必须要由root用户将其提升权限,将普通用户加入系统信任名单中,之后再使用sudo指令即可。


🍊root用户怎么修改文件拥有者身份

输入指令:** chown XXX(目标用户) bat.txt。**

附:修改所属组也是相同。(chgrp->修改所属组)


🍊other能不能修改?

答案是:不能

原因:1、无法确定谁是other。

2、对拥有者与所属组进行修改后,自然会发生变化。


四、常见权限问题 (面试问题与细节问题)

🍊目录权限

这里有一道面试题:

若要进入一个目录,那么需要什么权限?

A、'r'

B、'w'

C、'x'

答案是:C

目录权限解析:

(1)、目录权限'x':若没有执行权限,则无法使用cd(访问)目录;

(2)、目录权限'r':若没有读权限,则无法使用ls查看目录中的文件;

(3)、目录权限'w':若没有写权限,就无法使用touch与rm在目录中创建或删除文件。

附:如何知道自己在文件中的所属身份及对应权限呢?

首先你要判断文件信息的第二与第三大列,你是否是拥有者或是所属组,若都不是那就是other。

接下来再判断自己在文件内的权限:9个字符,以三种身份划分的权限区,每个权限区对应读、写、执行权限。

7d6d20c90843411e9555a41845a433a0.png

tips:权限只被认证一次。

示例:若你是拥有者,也是所属组,那么系统只认定你为拥有者。(从左到右检查)


🍊umask掩码

开始前,思考一个问题:文件或目录的创建,它的初始化权限是什么样?为何是这样?

5c5d0d52ecca4e4f8825c7d5d09a9805.png

Linux默认规则:

(1)、创建一个目录,它的起始权限是:777。

(2)、创建一个文件,它的起始权限是:666。

附:777与666分别是为:拥有者、所属组、other的权限,将每一个八进制转化成二进制位就代表:111与101,再将其看作是布尔值。

虽然规则如此,但创建处的目录与文件的权限却出现了偏差:

(1)、以上的目录权限起始值若为:'777',那么应该是“rwxrwxrwx”才是。但实际却为:'775',对应:“rwxrwxr-x”。

(2)、以上的文件权限起始值若为:'666',那么应该是“rw-rw-rw-”才是。但实际却为:'664',对应:“rw-rw-r--”。

这是为什么呢?

之所以出现这样的情况,其实与umask掩码有关。

输入指令:umask,你会发现出现一串:0002的掩码,主要看后三位。

267bbd027e5a4f57833d5c3ecf37fb24.png

Linux系统的初始权限产生 = 权限码 & (~umask掩码)。

规则是这样的:凡是在umask中出现的权限,都不应该在最终权限中出现。

** tips:即进制位相同为false。**

724c9bff64b847d78ae84dde9cd16237.png

小结:现在可以确定的是,每一次所创建的权限有其自身的默认值,而想要形成最终的权限则需要接受umask的过滤。


权限码定义权限

创建一个普通文件,使用权限码对文件权限进行修改。

96b2bb4586724580b4fef09fba2b2c40.png

将文件权限改为:拥有者(可读、不可写、可执行)、所属组(可读、不可写、不可执行)、other(可读、可写、不可执行)。

输入指令:chmod 546 bat.c

7946965d4a4a46a286efac65a23985c4.png

修改结果正确。

59160b22fb7b431786f6ba6af877332d.png


🍊粘滞位

对粘滞位的使用存在指定的场景:

如果你需要创建一个目录,要其他成员用户在这个目录下进行工作,所以你必须打开所用用户的目录权限,但此时出现了一个问题:大家可能会误删掉别人的文件,那么这时候就需要用到粘滞位,而不是关闭其他人的写权限。

f2bd942ab3f243c8af2ccffd85ce997c.png

解决办法:设定粘滞位

输入指令: chmod +t bat.c

4b89d61f4fc941f3a112c95456af8e3c.png

**设置成功 **

68e0cc8997c246319109733ee4af6ba8.png

附:

1、粘滞位只能给目录设置。

2、普通用户设立粘滞位必须本用户才能取消,root用户可更改一切。

3、粘滞位默认设置在other。


文章到此就结束啦!如果觉得还不错就关注Duoni叭!

标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/Duoni_7/article/details/125915994
版权归原作者 Duoni. 所有, 如有侵权,请联系我们删除。

“【Linux·克莱因计划】Shell外壳程序与文件权限操作”的评论:

还没有评论