U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 常见问题解答 >

【Linux】Shell外壳程序以及权限的理解(粘滞位、umask)

来源:http://www.tudoupe.com时间:2022-07-22

文章目录

  • shell外壳程序
    • 为什么用户不直接使用操作系统?
    • 用户如何访问操作系统
    • 什么是壳牌壳牌程序
    • 外壳程序存在的意义
    • 查看当前使用的壳牌壳牌程序
  • 权限
    • Linux下的用户
    • 用户切换
    • 权限是什么?
  • Linux权限管理
    • 查看文件属性
    • 文件访问者分类(个人特征)
    • 文件类型和访问权限(对象属性)
    • 如何显示文件限值
    • 修改文件权限(两种方法)
    • 更改文件所有者和组
  • 常见权限问题
    • 目录权限
    • umask
      • 设置umask
    • 粘滞位

shell外壳程序

为什么用户不直接使用操作系统?

我们平时在使用Windows的图形化界面或者在Linux下进行敲命令,是在直接使用操作系统吗? -----并不是

首先,我们知道计算机的结构如下:

image-20220720095121174

操作系统:管理下游软件,为上游用户提供良好的执行环境

操作系统的功能是复杂的,因此如果可以直接访问操作系统,使用操作系统是不适当的。

原因:

  1. 它对用户不友好,因为用户不擅长直接使用操作系统,用户需要非常熟悉操作系统才能正确使用。
  2. 如果你直接访问操作系统:
    1. 操作费用昂贵(你需要学习这个,然后可以使用它)
    2. 当用户犯错误时,存在不安全的因素(操作系统崩溃和整个计算机崩溃)

就比如

当银行直接向所有人提供资金时,他们自己操作一切,银行的库也暴露于每个人面前。 现在,人们首先需要的是能够操作银行的机器,如果有人有一个坏主意,尝试从库转移钱到自己的账户将带来极大的安全。

因此,由于上述原因,系统安装程序不会让你直接操作操作系统

用户如何访问操作系统

我们如何与操作系统交互,因为我们通常使用Windows图形界面,而不是在Linux下键入命令时直接使用操作系统?

在Windows下:点击图形界面完成我们的
操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)

在Linux下:击出命令并返回结果(如果击出ls,目录中的文件被显示)

事实上,用户通过“间接人”访问操作系统的方法,相当于一个“媒婆”。而这个媒婆它是shell程序,Windows图形界面和Linux命令实际上是操作系统提供的shell程序。

什么是壳牌壳牌程序

Linux实际上就是一个操作系统,我们叫做"kernel", 一般用户不可以直接使用kernel,而是通过“kernel”的外壳程序,也就是shell来与kernel沟通。

简单的shell定义:命令行解释器

  • 将使用者的命令翻译给核心 (kernel) 处理
  • 同时,核心处理结果被译为用户

外壳程序存在的意义

shell程序的存在的意义是什么?

  1. 是用户与操作系统交互的中间软件层
  2. 在某种程度上,它能保护操作系统,并拒绝某些使用者的非法或不合理的请求

事实上,壳牌程序本身并不与操作系统相互作用,而是与导数过程相互作用

事实上,计算机的架构是这样的:

image-20220720105859731

查看当前使用的壳牌壳牌程序

echo $BASH

结果:/usr/bin/bash这其实就是一个文件

bash就是CentOs中的shell外壳程序。shell就是对外壳程序的统称

shell是调解员的职业,bash是调解员的职业,例如女王

权限

Linux下的用户

root超级用户,只有一个。 在Linux下最多权限,没有限制(管理员)

普通用户一般用户可以拥有多个用户,但有限制

根用户的命令提示#

常见的用户命令提示是:$

在Linux下,可以同时有多个用户,因此Linux是一个多用户操作系统

用户切换

两种写法:

su username

su - username

两种写法的区别:

-选项 它代表切换用户身份时,用户的环境变量以及工作目录也要切换成新用户的环境变量和工作目录。环境变量是用来定义用户的操作环境的,如果环境变量没有随用户身份切换,那么很多操作将无法正确执行。

将根切换为普通用户

su username或者su - username

普通用户切换到根用户

susu -su rootsu - root

普通用户转换为普通用户

su usernamesu - username

注意

  • 普通用户间的转换和从普通用户到根用户间的转换需要了解对方的密码,只有正确输入密码才能实现这种转换
  • 从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。

事实上,根和普通用户是Linux下存在的真正帐户

权限是什么?

权限是什么:

我们可以说我有权阅读这个文件

但是如果文件本身是不可读的,那么即使我们拥有很多权利,我们也不会有权阅读文件,因为文件本身没有可读属性。

有两个方面

  1. 事物本身具有的属性
  2. 人是否有权利去做

也就是说,权威的核心是人 + 事物的属性

Linux权限管理

查看文件属性

ll允许您查看文件属性的命令

image-20220721153123323

其中,ll第一个行中的第一个字符显示修改文件的文件类型

image-20220720132913254

补丁:在Linux下,文件类型不由文件प्रत्यय区分

只要是可执行的文件。 即使您将副词改为 out.txt

也可以执行,或者用no代替后缀。也可以执行

在Linux下,它基于上图中的第一列区分文件类型

常见文件类型:

d表示目录文件

-表示普通文件

p表示管道文件

b表示块设备,例如磁盘设备

查看块设备:第一个字符以b开始image-20220721075309342

c显示字符设备,如键盘或显示器

查看字符设备:第一个字符以c开始

image-20220721082112413

l显示链接的文件:比Windows更快

image-20220721082938534

一个链接文件是设置在图中.link到可执行的程序

然而,这个可执行文件在当前文件中没有创建,所以它是红色的

关于文件类型,你可以ll查看第一列来查看

注意

  • Linux下文件类型不由文件末尾区分,这并不意味着它不能被使用,因为末尾名在系统级别上并不意味着任何东西,但是它对用户有用,用户可以很容易区分。

  • 只有Linux不会通过文件प्रत्यय区分文件类型,但不是在其他环境中!

    例如,如果 modified.txt不能被识别的话,用 gcc.File c编译脚本这是因为GCC是Linux下的软件,gcc!=Linux系统

文件访问者分类(个人特征)

该 文件 的 权力 有 两 方面 :人与文件本身的属性,文件访问者是所谓的人,即访问者有哪些权利

  1. 文件的拥有者:文件属于谁
  2. 文件的所属组:文件属于哪一个组
  3. other:不属于上面两种的任何一个,就是other
  • 至于所有者,它通常是文件的创建者
  • 关于所属组,例如,你在开发小组A工作,你输入了一个叫做test.cpp的代码,文件的主人是你,如果Linux权限仅用于所有者和其他人,所以当A组的负责人(你的老板)想看代码时,他也属于另一个人。如果想让组长看,文件 也 必须 向 他人 公开,这让你看到你的竞争对手。所以你需要这个许可才能成为这个小组的成员
  • 对于其他人来说,Linux不会标记,只要它不是它的所有者,而它所属的团体是另一个

文件的主人,属于该文件的组别,或者另一个是字符,每个用户可能是其中的一个,而用户是一个特定的人

文件类型和访问权限(对象属性)

文件属性的文件权限部分:

image-20220721091531310

每个文件都有三个身份

每个身份都有三个人,说明他们的权力是什么

序列固定:第一个位置是r权限,第二个位置为w权限,第三个位置为x权限

其中r表示读权限,w表示写权限,x表示执行权限,-表示无该权限

如果允许存在,相应的位置将写出允许的缩写r/w/x

如果没有,就用-表示位置的权限

以上图为例 :

  • 拥有者为rwx文件的主人有读权、写权和执行权
  • 所属组为r-x表示该文件所属的组有读取权、执行权和没有写入权
  • other为r-x,表示other具有读权限、执行权限,没有写权限

如何声明文件的权限?

根据文件的权限显示行

文件的主人有 xx xx 没有 xx

该文件所属的组有 xx xx 没有 xx

该other 具有 xxx xxx 没有xxx

如何显示文件限值

1.字符表示方法

字符表示方法是,我们使用ll其中明示的权限

image-20220721092840991

八进制数值表示

因为

  1. 权限的顺序是固定的:r w x

  2. 每一个位置 要么就是有该权限,要么就是没有该权限(只有两种状态)

所以我们可以用1来表示这个位置有权限,而0来表示这个位置没有权限,所以我们可以用三个二进制系数来表示一个身份的权限

3个二进制码可以转换为8个二进制码,所以你可以使用9个二进制码,即3个8个二进制码,来表示文件对三个身份的权限是什么

image-20220721093148755

例如,如果文件的权限是rwx r-x r-x

然后使用二进制表达权限:111 101 101

八进制表示权限:7 5 5

修改文件权限(两种方法)

chomd[参数]权限文件名

与相应的文件权限有关,修改文件权限有两种方法

1️⃣字符修改: ugo 和 + -

权限更改

  • +::增加由字符串 permissions 表示的权限范围
  • -取消由权限代码指示的权限到权限范围的权限
  • =由给权限范围的权限指定的权限。

用户符号

  • u:拥有者
  • g:所属组
  • o其他用户
  • a:所有用户

#将单个权限添加到单个身份

将执行权限添加给所有者:

chmod u+x test.c

删除您的小组的阅读权限:

chmod g-x test.c

#将多个权限添加到单个身份

删除业主的读写权限:

chmod u-rw test.c

删除所有其他人的权限:

chmod o-rwx test.c

增加所有权

chmod u+rwx test.c

#修改多个身份的单个权限

将读取权限添加到所有者并删除执行权限:

chmod u+r,u-x test.c

删除所有者阅读权限,增加团体的写权限

chmod u-r,g+w test.c

#修改多个身份的多个权限

所有者删除写和执行,属于组删除执行,其他添加读和执行

chmod u-wx,g-x,o+rx test.c

#修改身份的所有权限

给所有人去掉读权限

chmod a-r test.c

2️⃣八进制修正案:三进制八进制数字的组合

每个身份都有三个权限,每个三个权限都有两个状态:0和1,0表示没有这样的权限,1表示有这样的权限。 三个二进制数字构成一个特定的八进制数字,代表一个身份的授权

有三个身份,所以您只需要三个八进制数字来设置所有身份的权限

rwx rwx r--对应111 111 100对应774

所有权利

chmod 777 test.c

把所有权利从每个人手中夺走

chmod 000 test.c

#仅为所有设置阅读权限

序列是 r w x, 只有读取权限对应于:100即八进制4

每个人都只读,所以每个身份的限值是4

chmod 444 test.c

#所有者阅读和写,小组成员只读,其他人没有权利

chmod 640 test.c

没有权力意味着什么?

如图所示:

image-20220721114215046

image-20220721114607974

注意根不是由权限控制的,即使没有权限也能运行

image-20220721115606256

root作为other 甚至可以把人家的文件的权限给改了

image-20220721120044195

更改文件所有者和组

注意:

您需要在执行命令之前操作根(命令)或添加它sudo否则,您需要输入对方的密码,系统可能不同意这项操作

sudo执行与根权限执行的后续命令

但是sudo要求正常用户在新来者列表中执行的命令,将用户添加到新来者列表需要根身份(下文解释)

1️⃣更改文件的拥有者

选中指定主机文件名

2️⃣更改文件的所属组

chgrp指定小组文件名

3️⃣组合修改

选择指定主机:指定组文件名

注意问题

为什么不修改到其他

  1. other并不具体

  2. 修改了所有者和属于,但不属于的组,是另一组

如果所有者也属于该组,并删除所有所有所有权,那么该文件可以作为成员组访问/修改/实现吗

在Linux下文件的权限仅被验证一次

首先,决定你是谁,如果你是所有者,那么只看所有者的权利,不管你是否属于该团体。 如果不是所有者,而是你所属的团体,就看你的团体的许可

常见权限问题

目录权限

面试问题: 什么是进入目录的权利?

相信许多人会认为这是阅读许可

其实并不是

对于目录来说

  • 执行权限:进入目录
  • 可读权限查看目录中的文件内容(例如ls命令)
  • 可写权限在目录中创建/删除/修改文件或目录

所以mkdir创建目录时, 默认权限是读取, 写入, 执行等.

umask

mkdir dir1为创建目录,没有权限rwx rwx rwx

而是rwx rwx r-x

touch file1为创建文件,允许是rw- rw- r--

why?

为什么创建的文件或目录的权限不是来自777000开始

而是来自中间的某个国家?

Linux默认:

  • 创建了目录,从777开始的

  • 创建了一个通用文件,从666开始的

    (较少可执行,因为普通文件有不同的文件类型,有些是不能执行的,如果一个文件是可执行的,则遵循自加权限)

现象:

  • 创建目录,开始权限:775
  • 创建一个共同文件,开始权限:664

这是为什么呢?

事实上,最终权力的确定与隐藏有关

这个掩码就是umask,叫做权限掩码

在“ummak”中出现的任何权利不应出现在“最终权利”中

注意:umask为4位数字,只关注umask最后的三个可以是,而第一个其他权限是相关的。0002,我们认为是002即可

查看umask

umask

所以 起始权限 与 umask 做怎样的运算才能得到 最终权限呢?

既然umask中出现的权限,都不应该出现在最终权限中,这就意味着umask与起始权限经过某种运算之后,保留起始权限中没有在umask中出现的权限

所以应该是启动权限和做操作后退缩权限

解释:

如果umask中某个位置为0,也就是umask中没有这个权限,那么取反后就是1,与起始权限做与运算就可以保留下来umask中没出现的权限

如果umask中某个位置是1,也就是umask中有这个权限,那么取反后就是0,与起始权限做与运算就可以去掉这个在umask中出现的权限

结论:最终权限=起始权限 & (~umask)

设置umask

如果你希望最终权限与系统不相符,你可以设置自己的权限

umask 0xxx:xx是 theumask集合的值

举个例子

如果设置为umask 0777

这样获得的文件的最终权限必须是000也就是说,没有权威

粘滞位

存在问题

如果用户有写入目录的权限,那么用户可以删除/修改目录中的文件,即使用户没有修改文件的写入权限。

换句话说,你为什么可以删除我所写的文件?

验证一下:

image-20220722200608652

如上面所示,即使由根创建的文件也可以由普通用户删除

因此, 这个机制似乎太不合理的, 目录写权可以随意删除其他人的文件!

并且即使你把rootfile.txt文件的所有权限都被删除,虽然它们不能读取,但也可以删除。

我既不能读又不能写, 但我能删除!

当然,正常情况下不同的用户有各自的工作目录,一个用户的工作目录只有自己有读、写、执行权限,所属组以及other都是没有任何权限的。所以other连你的工作目录进都进不去,其实是很安全的!如图:image-20220722202245896

但是有特殊情况:如果所有用户都在一个工作目录中,那就不会是一个混乱!

例如, tmp目录在根目录下:/tmp

image-20220722202600125

其实这个tmp目录是目录中存储的所有临时文件的目录

为了解决这个不合理的问题,在Linux下引入了固定位置的概念

换句话说,如果每个人都在同一目录中工作,并且每个用户都有默认的删除/修改目录中的所有文件的权限,那么所有用户如何才能删除/修改他们自己的文件?

chmod +t目录名称

在此点,目录的权限如下:

image-20220722204302083

在这一点上,对另一个人来说,权力就成了rwtt是一个 X 的特殊情况,其他人可以进入目录,但只能删除自己的文件,并且不能删除其他文件。

注意

1.粘贴位置只能设置在目录中

2.一般来说,谁设置固定位置,谁不能取消(根是无限制的)

如果目录设置为固定位置,那么该目录下的文件只能由下列成员删除:

  • 超级管理员
  • 该目录的所有者
  • 该文件的所有者

本文结束. 谢谢您阅读.

在这里插入图片描述

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息