shell命令以及运行原理、Linux权限、粘滞位

news2024/10/7 18:22:18

今天我带来Linux重点知识:shell命令以及运行原理、Linux权限、粘滞位的知识点。



目录

    • shell命令以及运行原理
    • Linux权限的概念
      • Linux下的用户
      • su命令
    • Linux权限管理
      • 文件访问者的分类
      • 文件的类型和访问权限
      • 文件权限值的表达方法
    • Linux关于权限的知识点补充
      • 1.Linux创建用户
      • 2.sudo指令
    • 文件访问权限的相关设置方法
      • 1.chmod指令
      • 2.chown指令
      • 3.chgrp指令
      • 4.umask指令
      • 5.file指令
      • 6.使用 sudo分配权限
    • 粘滞位
    • 权限的总结



shell命令以及运行原理

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

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

将使用者的命令翻译给核心(Kernel)处理
同时,将核心的处理结果翻译给使用者

对比 Windows GUI,我们的操作Windows也不是直接操作Windows内核,而是通过图片接口,点击,从而完成我们的操作。

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

下面是一个简单的示意图
在这里插入图片描述
shell存在的意义:
a.进行命令行的传递和返回结果
b.保护操作系统(遇到具有破坏操作系统的指令进行拦截)
c.执行命令的时候,创建子进程来进行执行(如bash就是centos 7下使用的一种shell,bash是一个进程,执行命令的时候,bash创建子进程,由子进程来执行命令)



Linux权限的概念

Linux下的用户

Linux下有两种用户:超级用户(root)、普通用户

超级用户:可以在Linux系统下做任何事情,不受限制(牢记一句话,权限只是对于普通用户而言)
普通用户:在Linux下做有限的事情

那么我们怎么快速分别现在是超级用户还是普通用户呢?可以通过指令输入提示行的最后一个字符来分辨。

超级用户命令提示符为"#"
普通用户命令提示符为"$"

在这里插入图片描述

即然懂得了超级用户和普通用户,我们就要学会如何在两种用户之间来回切换。这就要用的一个新的指令:su指令

su命令

语法:su 用户名
例如:要从root用户切换到普通用户的话,则使用su 普通用户(如,我的Linux机器里面有一个普通用户zrb,我要将root用户切换为普通用户,则使用su zrb)
要从普通用户切换到root用户,则使用su root(root可以省略),此时系统会提示输入root用户的密码

下面是su指令的三个细节:

只使用su切换用户的时候,所处的目录位置没有发生变化。
在这里插入图片描述
使用su - ,即为重新登录,那么将处于家目录下。(su - 是切换为超级用户)
在这里插入图片描述
超级用户可以任意切换其他普通用户,不需要密码,还是那句话,权限是对于普通用户而言的。

Linux权限管理

文件访问者的分类

文件和文件目录所在者:U - User
文件和文件目录所在者 所在组的用户:G - Group
其他用户:O - Others

Other由不是文件的拥有者和文件的所属者来判断。

文件的类型和访问权限

在前面的指令讲解中,我已经说过了ls指令可以查看某个目录下的目录和文件,那么现在我对查询的结果进行分析。
在这里插入图片描述
如上,在上次的讲解中,我只是提到了后面的颜色去分别目录和文件等其他信息,方框里并没有讲解到。

在讲解之前,我们需要先了解几个概念。

1.文件类型(每一种文件类型由一个字母代替),Linux操作系统下,不用文件后缀区分文件类型,而是使用文件属性中第一列的第一个字符来区分文件类型。

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

2.基本权限(三大基本权限:读、写、执行)

读(r):Read对文件而言,具有读取文件内容的权限;对目录而言,具有浏览目录信息的权限
写(w):Write对文件而言,具有修改文件内容的权限;对目录而言,具有删除、移动目录里文件的权限。
执行(x):execute对于文件而言,具有执行文件的权限,对目录而言,具有进入目录的权限。

有无权限有什么区别
在这里插入图片描述
注意:root作为other,即使other对于某个文件没有权限,root依然可以做读、写、执行等操作。

接下来,我来正式讲解方框里的内容
在这里插入图片描述

如上面的图片,文件名(目录名)为ctrlProcess

1.第一个字符是d,表示文件类型是文件夹,也就是目录
2.后面三个为一组,第一组表示拥有者的权限;第二种表示所属者的权限;第三组表示other权限,至于表示的是什么意思,后面再来讲解。
3.数字2表达的意思涉及到其他内容,以后再来
4.其他内容依次排过去,分别表示的意思是文件拥有者、文件所属组、字节大小、创建或者修改的时间、文件名等内容。

注意的是:Linux操作系统不看文件后缀,在创建文件时,我们也可以加入后缀便于自己区分文件类型,当像gcc(Linux下的c语言编辑器)还是看后缀的。

文件权限值的表达方法

字符表示方法

Linux表示说明Linux表示说明
r- -仅读-w-仅写
- -x仅执行rw-可读可写
r-x可读可执行-wx可写可执行
rwx可读可写可执行- - -无权限

8进制数值表示方法

权限符号八进制二进制
r- -4100
-w-2010
- -x1001
rw-6110
r-x5101
-wx3011
rwx7111
- - -0000

所以,在上面图片中,拥有者和所属组的权限是可读可写可执行;other的权限是可执行。

Linux关于权限的知识点补充

1.Linux创建用户

Linux有一个root用户,我们可以通过指令创建许多的普通用户,具体指令操作如下:

cd /home //先加入家目录
adduser zhangsan //添加普通用户,名字为zhangsan
passwd zhangsan //设置密码,注意再来的密码不会回显,也就是输入不会显示出来

接下来,我们就可以使用指令登录,如下:

ssh zhangsan@(云服务器公网地址)

则可以登录张三的普通用户了。

那么怎么删除用户呢?指令如下:

userdel 用户名

如果要将该用户留在系统上的文件也删除掉的话,可以使用指令

userdel -r 用户名

注意:当我们要创建用户时,普通用户是没有权限去创建新用户的,这是我们只有切换为root用户,或者sudo提权才可以,
在这里插入图片描述
这里我切换为root用户,演示一遍
在这里插入图片描述

2.sudo指令

在Linux的使用中,权限的影子无处不在,如:在上面ctrlProcess目录中,lisi用户属于other,只有执行的权限,没有写和读的权限,那么我们要查看ctrlProcess目录,其中一种方法就是切换为root用户。
在大部分情况下,切换到root用户可以解决,但是当我们要在普通用户中更新某一个工具时,难道要切换成root用户?切换到root用户去下载,不就下载到了root用户吗,我只要更新普通用户的工具应该怎么做呢?

这时,我们就可以用到sudo指令了。

sudo 命令行
可以让该条命令执行过程中具有超级用户的权限,输入的密码是当前普通用户的密码。当输入该指令后,下次执行该功能加sudo不用输入密码,一般持续10分钟。

演示如下:
在这里插入图片描述

解决普通用户无法sudo的情况,原因是未被加到可信任的名单
方法如下:

以root进行登录
vim /etc/sudoers
找到 (Allow root to run any commands annywhere),粘贴这一行,将新一行改为普通用户。

在这里插入图片描述
跟我的普通用户zrb那样操作即可。

注意的是,在sudo提权指令中,sudo指令输入的是普通用户的密码;su指令输入的是超级用户的密码。

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

1.chmod指令

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

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

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

+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
②三位8进制数字
在上面rwx的权限讲解中,就有对权限采用八进制表示的,这里我们也可以采用八进制来进行赋予权限。
在这里插入图片描述

2.chown指令

功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名

常用选项:
-R : 处理指定目录以及其子目录下的所有文件

在这里插入图片描述
使用chown指令一次性修改文件拥有者和所属组
在这里插入图片描述

3.chgrp指令

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名

常用选项:-R 递归修改文件或目录的所属组

在这里插入图片描述

4.umask指令

功能:查看或修改文件掩码

起始权限:系统设定的。

普通文件起始权限:666(rw- rw- rw-)
目录的起始权限:777(rwx rwx rwx)

最终权限:起始权限换算而来

系统为了更好的控制文件权限,系统会有默认的权限掩码的概念!

umask指令可以查权限掩码
在这里插入图片描述
格式:umask 权限值 (设置新的权限掩码)
如:umask 777
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。

超级用户默认掩码值为0022,普通用户默认为0002。

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

权限掩码的规则就是在起始权限中,去掉在umask中出现的权限,不能影响其他任何权限。也就是在权限掩码中出现的权限,就不能在最终权限中出现。

下面是求普通文件和目录的最终权限的过程:
在这里插入图片描述

5.file指令

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

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

在这里插入图片描述

6.使用 sudo分配权限

(1). 修改/etc/sudoers 文件

chmod 740 /etc/sudoers
vi /etc/sudoers

在这里插入图片描述

第一条指令剥夺去了other的权限,保证了安全性,只有root用户(该文件的拥有者和所属组都是root)才可以修改/etc/sudoers的内容。
第二条指令中的vi和vim都可以打开文件,相当于打开/etc/sudoers文件去修改信任内容

格式:接收权限的用户登录的主机 = (执行命令的用户)命令
在这里插入图片描述
(2). 使用sudo调用授权的命令
命令:sudo
常用选项:-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)

格式:sudo -u 用户名 命令

实例:sudo -u root /usr/sbin/useradd u2
使用root身份去创建新用户u2。

粘滞位

背景:在使用Linux的时候,未来可能有一些共享目录,被所有的普通用户共享,用来保存普通用户产生的临时数据。共享目录通常是root提供的。

粘滞位是一个比较难以理解的内容,如果没有讲解对应的使用环境,单单只是概念的引出,那是十分难以理解的,现在我先来模拟一个场景。

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

由于是共享目录,那么不管是该共享目录的拥有者、所属组、other都要有rwx权限,即分别要保证可以在该共享目录中

读(r):进行浏览目录信息
写(w):具有删除、移动目录里文件
执行(x):具有进入目录的权限。

在这里插入图片描述
在这里插入图片描述
注意root1对应other的权限只有读。

在这里插入图片描述
这里有一个问题:为什么zrb作为root1文件的other,只有读的权限,为什么还是可以删除root1呢?

这里需要注意的是,某个用户只要具有对某个目录的写权限,那么就可以对目录里的任何文件进行删除和移动。

在前面设定下,就是要创建一个共享目录,所以该目录对于所有用户都有写(r)的权限,那么就导致了某个用户在该目录下可以删除其他用户的文件。

总结:普通用户能否在某个目录下,删除其他用户的文件,只要看是否具有该目录的写权限即可,不需要看有没有对于该要被删除的文件有没有什么权限。

那么,如何解决呢?关闭该目录对所有用户的写(r)权限,那么不就违背了共享目录,哪个用户都可以在里面创建自己的文件,删除自己的文件吗。

此时就出现了粘滞位的概念,粘滞位的作用:让大家在使用共享目录的情况下,不能随便删除其他人的文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:粘滞位只能给目录添加。

指令:
chmod +t 目录名 //给目录加上粘滞位
chmod -t 目录名 //给目录删除粘滞位

当一个用户被设置成"粘滞位",则该目录下的文件只能由
1.超级管理者删除
2.该目录的所有者删除
3.该文件的所有者删除

权限的总结

目录的可执行权限是表示你可否在目录下执行命令。

如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)

而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限即使可以执行ls命令,但仍然没有权限读出目录下的文档。

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

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

相关文章

Unity3d C#使用XCharts数据显示格式说明(如:数据类型、数据显示为百分比%等)

前言 XCharts是开源且比较强大的插件,在Unity3d中搭建UI时常常使用的数据图表的制作插件, 特别是当下的数字沙盘、数字孪生等项目中应用较广。笔者公司也一直在使用该插件,本文主要是在开发过程中的一个小需求引发的整理分享。在项目中需要将…

vue2 若依项目,使用plotly.js-dist图表库,将数据图表一键导出为图片

此代码适用的场景是一个页面有多个数据图表。 首先需要拿到你生成数据图表的数据, 然后赋值给一个数组,数组需要在data定义,还需要去重。 // 检查是否有相同的parameter值const hasDuplicate this.toImageArr.some(iiem > iiem.paramete…

由于找不到xinput1_3.dll,无法继续执行代码的解决方法都有哪些?

关于由于找不到xinput1_3.dll,无法继续执行代码这个问题,其实在网上经常看别人提及,要解决这个问题,还是不难的,今天小编就来给大家详细的说说关于这个问题的解决方法吧,本文会介绍多种的修复方法,下面一起…

商品数据封装接口(PHP/Java/Python)

封装 在面向对象程式设计方法中,封装是指—种将抽象性函式接口的实现细节部分包装、隐藏起来的方法 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问 要访问该类的代码和数据,必须通过严格的接口控制 封装最…

提升生产效率的关键:如何选择适合您企业的设备管理系统?

在现代工业生产中,设备管理对于提升生产效率和降低成本至关重要。一个高效的设备管理系统可以帮助企业实现设备的有效监控、维护和优化,从而提高设备的可靠性、降低停机时间,并最终提升生产效率。选择适合企业的设备管理系统可能是一个复杂的…

Vision Pro:多人XR协作这样玩才对味

早在iOS 15系统更新中,苹果就推出了SharePlay功能,该功能主要针对多人协作和社交,允许用户在FaceTime会话中一起看剧、听歌、共享屏幕。Vision Pro头显也支持该功能,允许用户共享AR图像和空间上下文信息,实现远程可视化…

LeetCode 每日一题——2178. 拆分成最多数目的正偶数之和

1.题目描述 2178. 拆分成最多数目的正偶数之和 给你一个整数 finalSum 。请你将它拆分成若干个 互不相同 的正偶数之和,且拆分出来的正偶数数目 最多 。 比方说,给你 finalSum 12 ,那么这些拆分是 符合要求 的(互不相同的正偶…

Spring Boot 中的服务发现

Spring Boot 中的服务发现 Spring Boot 是一个非常流行的 Java Web 开发框架,它提供了很多工具和组件来简化 Web 应用程序的开发。其中,服务发现是 Spring Boot 中的一个非常重要的组件,它可以帮助我们自动地发现和管理应用程序中的服务。 什…

Prometheus 时序数据

一 时序索引 Prometheus 存储的是时序数据,时间戳(timestamp)来源于服务端本地的系 统时间。Prometheus 使用 Unix 时间戳(即自 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数)表示时间。 数 据 格 式 : …

C#核心知识回顾——10.List、Dictionary、数据结构、LinkedList

1.List List<int> list new List<int>(); List<String> strings new List<String>();//增list.Add(0);list.Add(1);List<int> ints new List<int>();ints.Add(0);list.AddRange(ints);//插入list.Insert(0, 1);// 位置0插入1//删//1.移…

Java内存模型—工作流程、volatile原理

导入 最近在做项目的时候发现很多业务上用到了多线程&#xff0c;通过多线程去提升程序的一个运行效率&#xff0c;借此机会来复盘一下关于并发编程的相关内容。为什么要使用volatile&#xff1f;volatile底层原理是什么&#xff1f;JMM内存模型解决的是什么问题&#xff1f;带…

基于 OpenCV 开发实现眨眼计数器

文末提供免费的源代码下载链接 在本教程中,我们将了解如何使用 Dlib、Python 和 OpenCV 创建眨眼检测器/计数器。 我们将首先使用 Dlib 的人脸检测器来检测视频中的人脸。然后我们将使用 Dlib 中的形状预测器来确定眼睛在面部的位置。 最后,我们将使用眼睛的标志来计算眼睛…

小白必看:这些项目可以让你轻松月入过万

月入五W的互联网副业野路子。总有一个适合你!刷到这篇回答的。就不要在看其他的了。 这些互联网项目你也能做 1、认识个哥们&#xff0c;每天去一些热门的寺庙拍视频开直播&#xff0c;帮人代请手串&#xff0c;每串赚15元&#xff0c;月入5万多&#xff0c;非常非常稳定。 2…

基于SpringBoot+vue的口腔管家平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Image Sensor的像素时钟计算

本文介绍Image Sensor的像素时钟计算。 在配置Image Sensor寄存器的过程中&#xff0c;像素时钟至关重要&#xff0c;它的正确设置关系到帧率&#xff0c;曝光参数的正确与否。我们从相关资料中了解到像素时钟有多种方法&#xff0c;究竟该选择哪一种呢&#xff0c;本文来对常…

【C++】函数绑定器技术

1. 函数绑定器技术&#xff0c;什么情况可以用到这种技术实现? 占位符和函数绑定器技术&#xff08;如std::bind&#xff09;可以在以下情况下使用&#xff1a; 参数绑定&#xff1a;当你想要绑定函数的某些参数&#xff0c;但又不想立即提供这些参数的值时&#xff0c;可以…

在idea中使用Git技术

1.配置git环境 打开idea,点击file->setting->搜索git&#xff0c; 将git的安装路径填写进去 2.去gitee创建一个远程仓库 3.拉入一个.gitignore文件&#xff0c;过滤掉不需要管理的文件 4.在idea进行如下操作 5.选择要提交的内容 目前只是保存在了本地仓库 6.推送到远端…

简单尝试将go项目用宝塔部署到服务器

最近写了一个go项目的小demo打算放到服务器上&#xff0c;但是中间遇到一些问题&#xff0c;这里我记录下&#xff1a; 一、找一个文件夹将打包后的go项目放进去&#xff0c;如图 二、安装执行exe文件的wine 终端执行命令 yum install wine 终端在这&#xff0c;如图&#xf…

macOS Sonoma 14 beta 3 (23A5286g) Boot ISO 原版可引导镜像下载

macOS Sonoma 14 beta 3 (23A5286g) Boot ISO 原版可引导镜像&#xff0c;7 月 5 日&#xff08;北京时间今日凌晨&#xff09;已发布 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U…

从0开始学架构-架构的定义

从0开始学架构-架构的定义 文章目录 从0开始学架构-架构的定义系统与子系统模块与组件框架与架构软件框架&#xff08;Software framework&#xff09;软件架构区别 重新定义架构&#xff1a;4R 架构软件架构重新定义 三组容易混淆的概念&#xff1a; 系统与子系统模块与组件框…