(5)shell命令以及Linux的权限

news2024/12/23 13:25:22

写在前面

本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。

shell 命令及运行原理

\textrm{Linux} 严格意义上说的是一个操作系统,我们称之为 —— \textrm{kernel} (核心), 但我们一般用户,是不能直接使用 \textrm{kernel} 的,而是通过 \textrm{kernel} 的 "外壳" 程序,也就是所谓的 \textrm{ shell} ,来与 \textrm{kernel} 进行 "沟通 " 。

\textrm{Linux}中,\textrm{ shell} 就是命令行解释器(command Interpreter),其主要包含:

① 将使用者的命令翻译给 \textrm{kernel} 处理。  ② 同时将 \textrm{kernel} 的处理结果翻译给使用者

 

\textrm{Windows} 中,\textrm{ shell} 就是  \textrm{Windows} \textrm{GUI} (图形化界面),我们操作 \textrm{Windows} 也不是直接操作 \textrm{Windows} 内核的,而是通过图形接口,点击从而完成我们的操作,所以其实也是一个外壳程序。

\textrm{ shell} 对于 \textrm{Linux},有相同的作用,主要是对我们的指令进行解析,解析指令给 \textrm{Linux} 内核。反馈结果在通过内核运行出结果,通过 \textrm{ shell} 解析给用户。

shell 的意义 

1.命令行解释(充当媒婆)

内核的设计非常复杂,使用者无法直接向Linux内核进行沟通,也无法直接读懂内核执行完命令的结果所以shell外壳充当"媒婆"这一角色来往于操作者和内核之间,

  • 外壳程序将用户输入的指令解释后传递给内核
  • 内核执行命令后得到的结果经外壳处理后传递给用户

 2.保护内核(充当保安)

有时用户想要内核执行的命令过于离谱,或者使用的指令内核根本做不到,那么此指令根本不会"打扰"内核,它会在shell外壳进行翻译时就被驳回!

 

Linux下的shell外壳是bash,而windows下的shell外壳是图形化界面 

Linux 权限 

Linux 具体用户的分类

 Linux 的用户分为 root 和普通用户,root 为超级用户,就像 Windows 系统中的管理员。

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

确认当前你是哪个用户,可以输入 whoami 指令:

whoami

 

我们当前是普通用户,如果想切换至 root 用户,我们可以输入 su -

su -

 

root 和 Linux 下任何一个用户,都要设置密码。

建议不要把 root 密码和普通用户的密码设置成一样的! 这不仅是出于安全角度,设置成一样的话现阶段容易搞混,你不知道什么时候要输的是什么密码。这里我们要切到 root,所以输入的是 root 的密码:

实操:当我们 su - 并输入正确的密码后,就可以完成用户的切换操作:

$ su -
Password: 

 在 root 用户下,想要切到普通用户甚至连密码都不需要输:

# su [用户名]

当然,如果你是普通用户想切换到另一个普通用户,当然还是需要输入密码的。

$ su [用户名]
Password:

 Linux 中文件相关的权限概念

当我们输入 ls -l 显示详细信息时,你有没有注意过这些信息?

 像这样的:

-rw-rw-r--
drwxrwxr-x

通过 ls -l 显示出来的是 文件的属性,而用过 cat 看到里面的是 文件的内容

文件类型

我们既然要学习权限,我们重点要理解 ls -l 显示的若干的字母组合。

-rw-rw-r--
drwxrwxr-x

第一列的第一个字符,叫做 "文件类型" 。

Linux 中不是以文件名后缀区分文件类型的,而是通过 ls -l 显示的第一个字符区分文件类型的。

这有点颠覆我们的直觉,因为我们 Windows 是文件末尾 [ .类型 ] 的格式去区分文件类型:

 

而在 Linux 下你跟我说文件类型跟后缀没有关系?!我们验证一下看看:

 

在我们 Windows 下,这里的 a.txt 这就是一个文本,但是在 Linux 是完全不关心你后缀是什么的。

Linux 的文件后缀纯属摆设,我们写后缀只是是为了给自己看的。

概念:Linux 是根据第一列第一个字符去区分文件的类型的。

注意事项:

既然 Linux 文件后缀纯属摆设,那我们把 test.c 改成 test.txt,然后用 gcc 编译可以吗?

 

 

 虽然 Linux不以文件名后缀区分类型,但是 Linux 并不排斥以后缀做文件类型。

基本权限

思考:什么是权限?

① 约束人的(对人进行分类)

② 需要对应的事物具有特定的属性

Linux 上,对文件的权限:

这个文件谁能访问?这个文件谁不能访问?

对应的文件应该具备的某种属性:r,w,执行 x

 在 Linux 系统中,人分三类:

① 文件的拥有者 owner     ② 文件的所属组 grouper       ③ 文件的其他用户 other

Linux 系统中文件的权限属性分为 r(读)、w(写)、x(可执行)。

每一组,对应的权限的为止含义是确定的。

那么文件的权限操作,应该涉及到几方面呢?  ① 修改文件的属性    ② 修改人

文件权限值的表示方法 

 字符表示方法:

 只需要搞明白 r w x - 这四个字符分别代表说明意思,就能轻松理解。

八进制数值表示方法:推荐使用

file 指令 

思考:如何区分一个文件?

显然这一串信息是无法满足我们了,我们还有一个专门用来辨识文件类型的指令 —— file 指令。

file [选项] 文件或目录

🔨  功能:辨识文件类型

📜  常用选项:

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

操作演示:file 

文件权限的修改 

chmod 指令

chmod [参数] 权限 文件名

🔨  功能:设置文件的访问权限

📜  常用选项:

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

chmod 命令权限值的格式:

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

  • +  向权限范围增加权限代号所表示的权限
  • -   向权限范围取消权限代号所表示的权限
  • =  向权限范围赋予权限代号所表示的权限

用户符号:  

  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

 

权限可以加上,亦可以除去!!!

像上面的test.txt没有可执行权限,我们加上:u+x之后,被绿了(bushi),变成了可执行 的了。

如果我想去掉某身份的读权限,我们可以:

chmod [分类]-[权限] {文件名]     # 去除权限
chmod [分类]+[权限] {文件名]     # 添加权限

指令的复合使用 

当然,还允许复合使用:

 

root 用户不受权限约束 

当你什么权限都没有时,会受到种种限制:

然而这些限制对至高无上的 root 来说,并没有什么卵用:

 

八进制数值表示方法 

讲完权限的修改了,我们再回到 Ⅱ.0x04  继续探讨 "八进制数值表示方法"。

任何一个八进制数(0~7)都可以被写成三个比特位,这三个比特位壹壹和每一类人对应。

我们有三类人,则需要3个八进制数与之对应,所以就有了 777、000、333 等更改权限的方案。

譬如 \textrm{owner} 的 - - - 分别对应 r\, w \, x  ,有或者无(两态),111 → 八进制 → 7。

\textrm{owner}→ 5 → 101 → r-x,原理是将八进制看作成二进制,对应上我们的权限。

八进制数值表示方法 :

 文件权限的转让

chown 指令

chown [用户名] [文件名]     # 修改文件的拥有者

 如果我是一个文件的拥有者,我想把文件给别人:

思考:当你想给别人东西的时候,要不要经过别人的同意?

当然需要!这里我们可以用 sudo 指令强制给别人:

 (sudo 有一个叫信任列表的东西,你现在输入如果出现报错是因为 root 没有把你添加到信任列表里,这个我们后期讲完 vim 之后再说。在 /etc/sudoers 路径下。)

不要????那就硬给。

当然我们还可以直接切换成 root,通过 root 去给,别人不要也不行,就是这么🐂🍺。

一个文件的创建者和拥有者一定是同一个人吗?

通过我们刚才修改文件的拥有者,我们就能得出 —— 不一定。

chgrp 指令

chgrp [用户名] [文件名]     # 修改文件的所属组

 和 chown 一样的用法,我们可以用 chgrp 指令改变文件的所属组 group。

 

目录的权限 

目录的权限

对于dir是一个目录,我们来去掉 r 权限,看看到底能不能进入这个 dir:

我们发现没有r也能进入dir目录。这就说明进入一个目录跟  r 没有关系。

跟w也没啥关系。

如果我想进入一个目录,需要说明权限?

如果目录只没有 r 权限,允许进入、允许在该目录下创建(写入)文件,只不过是不允许查看:

 

如果目录只没有 w 权限,允许进入,允许在该目录下查看文件列表,但是不允许创建文件:

如果同时没有 rw 权限,允许进入,但是不允许创建和查看目录下的文件列表。

💡 Linux 下一切皆文件,目录也是文件。再结合 "文件 = 内容 + 属性" 去理解。

目录里面保存的是部分文件的 "属性" 。

默认创建后的权限

为什么创建目录的默认权限是 775,而创建普通文件的默认权限是 664 ?

不同系统可能有差异吗?

创建的时候为什么不可以都是 777,权限都给我怼上呢?

默认权限:① 默认目录的起始权限:777      ② 默认普通文件的权限:666

既然如此,那为什么不是 777 / 666,而是 775 / 664 呢?

💡 默认权限 != 最终权限,Linux 中的最终权限 = 默认权限 "去掉" umask 中存在的权限。

umask 权限掩码 

因为系统中有一个默认的 "权限掩码" ,叫做 umask:

umask     # 打印权限掩码

 

 权限掩码:凡是在权限掩码中出现的权限,都不应该在最终权限中出现!

 

所以,最后目录的默认权限变为了 775,文件权限变为了 664。

❓ 思考:所谓的 "去掉" umask 中的权限,是不是减去呢?

💡 这里的 "去掉" 并不是减去。首先要说的是,umask 是可以修改的:

umask [掩码]      # 修改umask掩码

 

由此可见,我们的权限确实是受 umask 的影响的。但是实际上是这样计算的:

最终权限 = 默认权限 & (~umask)

 粘滞位(Sticky bit)

共享目录

Linux 下可以存在一些目录,拥有者和所属组是 root,

其他人允许以 other 的身份在该目录下进行文件的创建、读取、删除和修改等操作:

 

注意事项:在一个共享目录下,你不让我写,不让我读,但防不住我删除!

比如,有两个普通用户,用户A想让用户B访问它的文件,于是就 chmod 把 other 的 rw 全撤咯,

于是用户B急了,恼羞成怒,啊你不给我用你也别想用了,得不到就毁掉!直接给你把文件删了。

如果你仍然是想在共享目录下形成临时文件,但又怕别人给你删了,

你可以给共享的 <目录> 加上粘滞位来解决。

注意,是给目录加粘滞位!即你共享哪个目录,你就在哪个目录下加上粘滞位。

我们下面来隆重介绍一下 Sticky bit ——粘滞位。

粘滞位

chmod +t [目录名]     # 添置粘滞位

 以 root 身份给 all 目录添置粘滞位:

目录设置了粘滞位 t 后,作为 other 就无法随意地删除其他用户的文件了:

 

不过 root 还是想删就删,想干啥就干啥。

还是那句话 —— 普通用户再怎么进行文件操作,对 root 都是无效的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1320372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念&#xff0c;高性能计算与智算场景&#xff0c;高性能计算主要是面向天气预测、生物计算、材料计算等场景&#xff0c;而最近几年很火的智算主要是面向AI场景的计算&#xff0c;如语音识别、图像识别、自动驾驶等场景&#xff0c;我们可…

Git 如何撤回已 Push 的代码

在日常的开发过程中&#xff0c;我们广泛利用Git进行版本控制。然而&#xff0c;有时我们可能会误将错误的代码推送到远程仓库&#xff0c;或者希望在本地返回到先前的某个版本以重新进行开发。 就像我个人的经历一样&#xff0c;我曾推送了一些我认为未来会非常有用的优化方案…

14:00面试,14:05就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到12月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40…

SQL进阶理论篇(十一):什么是MVCC?

文章目录 简介什么是MVCC快照读与当前读悲观锁的问题示例参考文献 简介 在MySQL中&#xff0c;默认的隔离级别是可重复读&#xff0c;可以解决脏读和不可重复读的问题&#xff0c;但不能解决幻读问题。如果想要解决幻读问题&#xff0c;就需要采用串行化的方式&#xff0c;通过…

数据结构——【万字文章+配图+代码】带你深入理解二叉树

1. 二叉树的概念 二叉树是一种有限集合&#xff0c;由根和左右子树构成&#xff0c;每个结点最多有两棵子树&#xff0c;且这两棵子树具有顺序关系 2. 二叉树的特殊情况&#xff1a; 2.1 满二叉树&#xff1a; 一个二叉树&#xff0c;如果每次的结点都达到最大值&#xff…

07-Eventing及实践

1 Knative Eventing的相关组件 Knative Eventing具有四个最基本的组件&#xff1a;Sources、Brokers、Triggers 和 Sinks 事件会从Source发送至SinkSink是能够接收传入的事件可寻址&#xff08;Addressable&#xff09;或可调用&#xff08;Callable&#xff09;资源 Knative S…

二维码智慧门牌管理系统升级解决方案:房屋管理

文章目录 前言一、一站式服务二、全方位管理三、未来展望四、智慧解决方案 前言 科技带来智慧生活 随着科技的不断发展&#xff0c;智能化已经成为我们生活的重要组成部分。二维码智慧门牌管理系统是这一趋势中的关键工具之一。除了提供标准地址服务外&#xff0c;该系统还为房…

全栈开发中的安全注意事项:最佳实践和工具

安全性是当今数字环境中最重要的问题&#xff0c;而在全栈开发中这一点尤为重要。当企业努力创建强大且动态的应用程序时&#xff0c;他们必须应对复杂的安全威胁领域。在本文中&#xff0c;我们将探讨开发人员可以用来确保安全的全栈开发环境的最佳实践和工具。 1.1 全栈开发的…

电脑软件:推荐一款非常实用的屏幕截图软件

目录 一、功能介绍 二、软件特色 三、常用快捷键 四、软件总结 五、软件下载 FastStone Capture是一款功能强大的屏幕截图软件&#xff0c;它可以帮助用户轻松地捕获屏幕上的任何区域&#xff0c;并将其保存为各种格式的图像文件。以下是关于FastStone Capture软件的一些详…

小信砍柴的题解

目录 原题描述&#xff1a; 时间&#xff1a;1s 空间&#xff1a;256M 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 样例1输入&#xff1a; 题目大意&#xff1a; 主要思路&#xff1a; 注意事项&#xff1a; 总代码&#xff1a; 原题描述&#…

59. 螺旋矩阵 II(java实现,史上最详细教程,想学会的进!!!)

今天来分享一下螺旋矩阵的解题思路及代码的实现。 题目描述如下&#xff1a; 首先拿到这道题&#xff0c;首先不要慌张&#xff0c;我们来仔细分析一下会发现并没有那么难。 首先看下边界的元素是1、2、3递增的&#xff0c;那么我们也许可以根据这一点先把边界的元素一个一个给…

上下界取min/max的线段树问题:P8518 [IOI2021] 分糖果

https://www.luogu.com.cn/problem/P8518 没有要求在线&#xff0c;显然离线&#xff08;。维护时间戳&#xff0c;上线段树。 好了&#xff0c;我们现在知道一个人的曲线变化了。怎么做呢&#xff1f; 前面所有碰上下界的都是没用的&#xff01;我们只需要找最后一段的时间…

TrustZone之顶层软件架构

在处理器中的TrustZone和系统架构中,我们探讨了硬件中的TrustZone支持,包括Arm处理器和更广泛的内存系统。本主题关注TrustZone系统中发现的软件架构。 一、顶层软件架构 下图显示了启用TrustZone的系统的典型软件栈: 【注意】:为简单起见,该图不包括管理程序,尽管它们可…

【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)

系列文章目录 身躯已然冰封&#xff0c;灵魂仍旧火热 本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 文章目录 系列文章目录前言题目链接&#xff08;有需要…

计算机组成原理——数制与编码

1.在以下编码中&#xff0c;零的表示唯一的是&#xff08;C&#xff09; A.反码 B.原码 C.补码 D.原码和移码 2.假设某数的真值为-100 1010B&#xff0c;在计算机内部表示为1011 0110B&#xff0c;该数采用的编码为&#xff08;D&#xff09; A.移码 B.原码 C.反码 D.补码 3.…

Linux shell编程学习笔记36:read命令

目录 0 前言1 read命令的功能、格式、返回值和注意 1.1 命令功能1.2 命令格式1.3 返回值1.4 注意事项2 命令应用实例 2.1 一次读入多个变量值2.2 不指定变量名2.3 测试read命令的返回值2.3 指定输入时限并进行相应处理2.4 -t 指定结束符2.5 -n 指定输入字符个数2.6 -N 指定输入…

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现AOA-SVM算术优化支持向量机的数据分类预测…

css的filter全属性介绍

原图&#xff1a; 模糊&#xff08;blur&#xff09; 单位可为px或rem&#xff0c;值越大&#xff0c;越模糊 filter:blur(3px) filter:blur(0.3rem) 亮度(brightness) 值可为数字或百分数&#xff0c;小于1时&#xff0c;亮度更暗&#xff1b;等于1时&#xff0c;无变化&am…

微信支付怎么申请0.2费率

作为移动支付的主流方式&#xff0c;微信收款和支付宝为商家带来了便利的同时&#xff0c;每笔交易都要收取的0.6&#xff05;收款手续费也成为商家的负担。现在使用现金支付的人少之又少&#xff0c;为了给顾客带来便捷的购物体验&#xff0c;所以即便是要付出手续费&#xff…

十四、YARN核心架构

1、目标 &#xff08;1&#xff09;掌握YARN的运行角色和角色之间的关系 &#xff08;2&#xff09;理解使用容器做资源分配和隔离 2、核心架构 &#xff08;1&#xff09;和HDFS架构的对比 HDFS架构&#xff1a; YARN架构&#xff1a;&#xff08;主从模式&#xff09; &…