小言_互联网的博客

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

301人阅读  评论(0)

 

Hi!我是Duoni

 

 

目录

一、Shell命令及运行原理

🍊Shell是什么?

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

🍊Shell外壳程序的意义

🍊查看外壳程序

🍊浅解杂谈

二、权限

🍊Linux系统下的两种用户

🍊用户切换

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

🍊文件权限的认识

三、权限操作

🍊如何进行文件权限操作

🍊权限遐想

🍊如何修改文件拥有者

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

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

🍊other能不能修改?

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

🍊目录权限

🍊umask掩码

🍊粘滞位


 

 

一、Shell命令及运行原理

 

🍊Shell是什么?

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

 

在生活角度打个比方:

 

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

 

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

 

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

 

 


 

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

 

答案是可以的

 

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

 

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

 

就拿音响播放功能为例:

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

 

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

 


 

🍊Shell外壳程序的意义

 

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

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

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

 


 

🍊查看外壳程序

 

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

 

 

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

 

 


 

🍊浅解杂谈

 

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

 

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

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

 


 

二、权限

 

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

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

 

🍊Linux系统下的两种用户

 

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

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

 

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

 

 

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

 

 


 

🍊用户切换

 

用户切换指令:su

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

 

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

 

 

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

 

 

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

 

 


 

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

 

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

 

打个比方:

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

 

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

 

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

 

附:什么是文件权限呢?

 

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

 

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

 


 

🍊文件权限的认识

 

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

 

 

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

如展开图:

 

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

 

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

 

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

 

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

 


 

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

 

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

 

tips:

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

 

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

 

 

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

 

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

 

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

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

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

 

比如:

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

 


 

三、权限操作

 

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

 

🍊如何进行文件权限操作

 

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

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

 

演示:

 

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

 

 

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

 

 

 

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

 

 

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

 

 

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

 

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

 

 

修改权限完毕。

 

 

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

 

 

此时权限已经被全部关闭

 

 

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

 

 

事实证明,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个字符,以三种身份划分的权限区,每个权限区对应读、写、执行权限。

 

 

 

tips:权限只被认证一次。

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

 


 

🍊umask掩码

 

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

 

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的掩码,主要看后三位。

 

 

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

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

 tips:即进制位相同为false。

 

 

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

 


 

权限码定义权限

 

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

 

 

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

 

输入指令:chmod 546 bat.c

 

 

修改结果正确。

 

 


 

🍊粘滞位

 

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

 

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

 

 

解决办法:设定粘滞位

输入指令: chmod +t bat.c

 

 

设置成功 

 

 

附:

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

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

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


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

 

 

 


转载:https://blog.csdn.net/Duoni_7/article/details/125915994
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场