【Linux】shell 及权限理解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

​🌠 作者@阿亮joy.
🎆专栏《学会Linux》
🎇 座右铭每个优秀的人都有一段沉默的时光那段时光是付出了很多努力却得不到结果的日子我们把它叫做扎根
在这里插入图片描述

目录

👉shell命令以及运行原理👈

在这里插入图片描述
其实我们平时敲的指令都是可执行程序都是用 C语言或 C++ 代码写的。那这些指令是什么在 shell 上运行起来的呢shell 又是什么呢

Linux 严格意义上说的是一个操作系统我们称之为“核心(kernel)” 。但我们一般用户不能直接使用 kernel。而是通过 kernel 的“外壳”程序也就是所谓的 shell来与 kernel 沟通。如何理解为什么不能直接使用 kernel 呢

从技术角度 shell 的最简单定义命令行解释器command Interpreter主要包含

  • 将使用者的命令翻译给核心kernel处理。
  • 同时将核心的处理结果翻译给使用者。

在这里插入图片描述

对比 Windows GUI我们操作 Windows 不是直接操作 Windows 内核而是通过图形接口点击从而完成我们的操作比如进入D盘的操作我们通常是双击D盘盘符或者运行起来一个应用程序。

shell 对于 Linux也有着相同的作用主要是对我们的指令进行解析将指令解析给 Linux 内核。Linux内核运行的结果通过 shell 解析给用户。

  • 帮助理解假如你是一个闷骚且害羞的程序员张三那 shell 就像媒婆操作系统内核就是你们村头漂亮的且又让你心动的姑娘如花。你看上了如花但是有不好意思直接表白那就让你你家人找媒婆帮你提亲所有的事情你都直接跟媒婆沟通由媒婆转达你的意思给如花而我们找到媒婆姓王所以我们叫她王婆她对应我们常使用的 bash。张三不能和如花直接沟通就如同用户不善于和操作系统打交道也不能直接和操作系统进行交互。

shell 除了降低用户和操作系统交互的成本还有一个作用就是变相保护操作系统。因为当用户输入一些非法指令时shell 就会拒绝执行该指令这样就起到保护操作系统的作用了。

在这里插入图片描述
一般而言shell 本身并不执行对应的指令而执行指令是通过派生子进程的方式执行用户的指令。这样做是为了保护 shell。shell是命令行解释其的一个统称而 Centos 7 采用的命令行解释器是 bash。当用户登录成功后第一个在系统上跑起来的程序就是 bash。

在这里插入图片描述
一个标准的 shell 命令提示符的组成格式

在这里插入图片描述

在这里插入图片描述

👉Linux权限的概念👈

Linux 下有两种用户超级用户root和普通用户。

  • 超级用户可以在 Linux 系统下做任何事情不受限制
  • 普通用户在 Linux 系统下做有限的事情受权限的约束
  • 超级用户的命令提示符是“#”普通用户的命令提示符是“$”

命令 su [用户名]
功能切换用户。 例如要从 root 用户切换到普通用户 user则使用 su user。
要从普通用户user切换到root用户则使用 su rootroot可以省略此时系统会提示输入root用户的口令。

在这里插入图片描述
注当从普通用户切换到 root 用户su、su root 或者 su - 指令需要输入 root 用户的密码而当 root 用户切换到普通用户Ctrl + d 或者 su 普通用户名则不需要输入普通用户的密码。因为 root 用户的权限是最高的。su 和 su root 指令切换到 root 用户的时候并不会改变所处的路径而su - 指令切换到 root 用户的同时将路径改为 root 的家目录即 /root

在这里插入图片描述

当我们是 root 用户时输入 ls /home 可以查看所有的普通用户。

在这里插入图片描述
当我是普通用户我想要 root 用户的身份执行一条指令但不想变成 root 用户怎么办呢那么我们可以使用 sudo 指令该指令的使用需要改配置文件。当我们学了 vim 工具再来做这个操作。

在这里插入图片描述
当我们第一次使用 sudo 命令时是需要输入普通用户的命名的当使用 sudo 命令时间间隔较短时就不再需要输入普通用户的密码了。

没有将普通用户添加到配置文件中的情况

在这里插入图片描述
这种情况就相当于系统不信任这个用户那么如何解决这种情况呢我们需要将当前用户添加到配置文件 /etc/sudoers 中现在我们暂时不配置先使用 root 用户来进行操作。

在这里插入图片描述
那我们使用 sudo 指令进行提权的时候让我们输入自己的密码这是为什么呢这是给受信任的普通用户提供最少的执行障碍保护操作系统。

什么是权限

  • 权限是约束人的某一个人或者某一类人。例如非会员不能看需要会员才能看的电影不能听会员才能听的音乐等等。
  • 目标对象电影网站、音乐APP等本来就没有对应的属性业务。例如你不可能在电影网站上做 OJ 题。因为电影网站没有这样的业务那么你也就没有在电影网站上面做 OJ 题的权限。
  • 通俗来说权限就是一件事情是否允许被谁做。例如Linux 的文件权限 = 人角色 + 文件属性。

👉Linux权限管理👈

文件访问者的分类角色

一个人能做什么事并不取决于这个人的名字是什么而是取决于这个人的角色。比如张三是某个学校的校长他能够进入校长办公室是因为他名字是张三就能够进入校长办公室吗并不是是因为他的角色是校长所以他能够进入校长办公室。换了另一个张三就不能进入校长办公室了。

那文件的访问者角色的分类有什么呢

  • 文件和文件目录的所有者 u—User拥有者
  • 文件和文件目录的所有者所在的组的用户 g—Group所属组
  • 其它用户 o—Others 其他人

那普通用户和上面的三类访问者是冲突的关系吗并不是某个用户可能是一个文件的拥有者也有可能是另一个文件的所属组或者其他人。文件的访问者是一种角色或者说是一种身份普通用户可以被赋用不同的角色省份。而操作系统约束的就是角色并不是特定的普通用户人。

那么文件的三个角色究竟在哪呢我们来看一下
在这里插入图片描述
注不属于拥有者和所属组的用户就是其他人。

为何要存在所属组

在一个公司里会存在两个团队做一个项目那么谁把这个项目做更好这个项目就归属于谁。那么团队 A 有团队 A 的代码目录团队 B 也会有团队 B 的代码目录。这时候就肯定需要所属组这样的概念。如果没有所属组这样的概念那么其他团队的成员也能够看你们团队的代码了。所以所属组的概念也就必须存在。

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

在这里插入图片描述

文件 = 文件内容 + 文件属性。文件的属性包括读权限r、写权限w和可执行权限x。

那么我们输入ll指令显示器上显示的都是文件的属性。

在这里插入图片描述

1.文件类型

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

各种文件的例子

在这里插入图片描述
虽然说 Linux 系统不以文件后缀来区分文件但是这并不代表Linux 下的工具如gcc可能会对文件后缀有要求。

在这里插入图片描述
刚才我们学习的一个字符是文件的类型那么剩下的九个字符是文件的访问权限那这是如何对应起来的呢我们来学习一下。

2.基本权限

  • 读r/4 Read对文件而言具有读取文件内容的权限对目录来说具有浏览该目录信息的权限
  • 写w/2 Write 对文件而言具有修改文件内容的权限对目录来说具有删除移动目录内文件的权限
  • 执行x/1 Execute 对文件而言具有执行文件的权限对目录来说具有进入目录的权限
  • “-”表示不具有该项权限

剩下的九个字符三三为一组第一组是拥有者的权限第二组是所属组的权限最后一组是其他人的权限。

在这里插入图片描述
如何描述文件的权限

在这里插入图片描述
以目录文件 dir 为例dir 这个文件的拥有者是 Joy所属组是 Joy。拥有者具有读权限、写权限和可执行权限所属组具有读权限、写权限和可执行权限其他人具有读权限、没有写权限和具有可执行权限。

文件权限值的表示方法

1.字符表示方法

在这里插入图片描述

2.8进制数值表示方法

在这里插入图片描述

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

如何操作权限呢

操作文件的权限有两种一是设置文件属性chmod而是设置文件所属角色chown 或者 chgrp。

注当你是 root 用户或者是文件的拥有者时才能更改文件的属性。

chmod
功能 设置文件的访问权限
格式 chmod [参数] 权限 文件名
常用选项

  • R -> 递归修改目录文件的权限
  • 说明只有文件的拥有者和root才可以改变文件的权限

① 用户表示符+/-=权限字符

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限
  • 用户符号
    • u拥有者
    • g拥有者同组用
    • o其它用户
    • a所有用户
chmod u-r 文件名	#去除文件拥有者对该文件的读权限
chmod u+x 文件名	#给文件拥有者加上对该文件的可执行权限
chmod u-rwx 文件名 #去除文件拥有者对该文件的所有权限
chmod u+rw 文件名 #给文件拥有者加上对该文件的读权限和写权限
chmod g-rw 文件名 #去除所属组对该文件的读权限和写权限
chmod g+rwx 文件名 #给所属组加上对该文件的所有权限
chmod o-rwx 文件名 #去除其他人对该文件的所有权限
chmod u-rwx,g-rwx 文件名 #去除拥有者和所属组对该文件的所有权限
chmod a+rwx 文件名 #给所有人加上对该文件的全部权限
chmod a=rwx 文件名 #给所有人加上度该文件的全部权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

有和没有普通文件权限的样子

在这里插入图片描述
在这里插入图片描述
为什么我是所属组且所属组有对该文件的所有权限我还是不能够对文件进行相关的操作呢因为系统的角色匹配结构是 if-else if - else 结构而不是 if-if-if 结构。只要前面的角色匹配上了就只能拥有该角色对该文件的权限无法拥有其他角色对该文件的权限。其实如果 Linux 系统采取 if-if-if 的匹配结构你想去除拥有者的权限那么你也要去除所属组所对应的权限。这样是不合理的因为所属组可能还有有其他人。

root 用户不受任何权限的约束

在这里插入图片描述

sudo chown 用户名 文件名 #将指定文件的拥有者改为指定用户
sudo chgrp 用户名 文件名 #将指定文件的所属组改为指定用户
sudo chown 用户名1:用户名2 文件名 #将指定文件的拥有者和所属组改为指定用户
#-R 递归修改文件或目录的拥有者或所属组

注修改文件的拥有者和所属组都需要使用 root 用户也可以使用 sudo 指令暂时提权。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
②三位8进制数字

在这里插入图片描述

在这里插入图片描述

文件相关指令

1.file指令

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

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

在这里插入图片描述

2.umask指令

为什么要有权限呢便于我们和系统进行安全管理

那又为什么我们创建的目录或者普通文件其默认权限是我们所看到的样子呢

在这里插入图片描述
其实Linux 规定了目录的起始权限是 777而普通文件的起始权限是 666。除了起始权限Linux 系统还有一个权限掩码超级用户默认掩码值为0022普通用
户默认为0002。注最开头的 0 不需要管可以看做八进制数的标志系统默认会配置好 umask 权限掩码。凡是在 umask 权限掩码中出现的权限都必须在起始权限中去掉。

在这里插入图片描述
那去掉 umask 权限掩码中出现的权限是什么意思呢是做减法吗学习这个之前我们先来学习一下 umask 指令的用法。

umask
功能 查看或修改文件掩码
用法 umask 权限值

umask #查看权限掩码
umask 数字 #将权限掩码改为指定数字

在这里插入图片描述
那么现在我们来回答上面的问题去掉是做减法吗我们来看一下。

在这里插入图片描述
通过上图的推导我们可以知道去掉并不是做减法那么去掉究竟是什么意思呢其实是通过位运算来达到去掉的目的。最终权限 = 起始权限 & (~mask)

在这里插入图片描述
那为什么这样子就能做到去掉权限掩码中出现的权限呢因为默认 umask 权限掩码中的 1 表示要去掉的权限位0 表示要保留的权限位。那么~umask中的 1 表示要保留的权限位0 表示要去掉的权限位。那么起始权限和 ~umask 按位与就能够做到去掉权限掩码中出现的权限了。

目录的权限

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

在这里插入图片描述
在这里插入图片描述
如果我们要进入一个目录需要该目录的可执行权限。所以系统就规定目录的起始权限是 777 。因为所有的目录被创建出来一般都要能够被进入的。而大部分普通文件都是不可执行的所以普通文件一般被创建出来都是没有可执行权限的。

粘滞位

Linux 系统中有很多用户有时候用户需要在一个公共的目录下进行临时文件的操作增删查改。那么系统也有这样的目录来满足用户的需求。

在这里插入图片描述
在这里插入图片描述
那为什么张三为什么不在李四的家目录下操作呢因为没有权限。粘滞位是在一个公共的目录下大家一起进行文件操作其创建者是 root 用户。

那现在我们就自己手动创建一个公共目录吧
在这里插入图片描述
张三和李四在公共目录下创建自己的文件。
在这里插入图片描述
在这里插入图片描述
李四不能没有张三创建的文件的写权限和可执行权限

在这里插入图片描述
李四没有张三创建的文件的任何权限却可以删除张三的文件。
在这里插入图片描述

其他人对一个文件没有任何权限却可以删除该文件这样子合理吗其实很合理因为能不能删除一个文件并不取决于用户对该文件有没有权限而是取决于用户对于该目录有没有读权限。

在这里插入图片描述

一个文件能不能被删除取决于目录权限而公共目录对任何人都有读写执行权限。所以任何人都能删除其他人在公共目录下的文件。那这样是不是非常不合理我在公共目录下创建的文件居然被你删掉了那怎么行呢

那我们怎么才能让大家在一个公共目录进行 rwx 操作但禁止大家互删对方的文件呢那么这时候就需要给公共目录设置粘滞位权限的一种特殊情况。

注粘滞位只能给目录进行设置。

 chmod +t 目录名 #给公共目录设置粘滞位

在这里插入图片描述
设置完粘滞位后我们再来看看李四能不能删除张三的文件了。

在这里插入图片描述
通过上图我们可以看到给公共目录设置好粘滞位后用户无法删除别的用户的文件只能删除自己的文件。

当一个目录被设置为"粘滞位"(chmod +t)则该目录下的文件只能由

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

👉总结👈

本篇博客主要讲解了shell 命令及其运行原来、权限的概念、权限管理、文件相关指令以及粘滞位等等。那么以上就是本篇博客的全部内容了如果大家觉得有收获的话可以点个三连支持一下谢谢大家💖💝❣️

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shelllinux