Linux初识:【shell命令以及运行原理】【Linux权限的概念与权限管理】
目录
一.shell命令以及运行原理
二.Linux权限的概念与权限管理
2.1Linux权限的概念
sudo普通用户提权
2.2Linux权限管理
2.2.1文件访问者的分类(人)
2.2.2文件类型和访问权限(事物属性)
2.2.3文件权限值的表示方法
字符表示方法
八进制数值表示方法
2.2.4文件访问权限的相关设置方法
chmod
chown/chgrp
用八进制改权限
2.2.5目录权限
2.2.6缺省权限
2.2.7粘滞位
一.shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。
同时,将核心的处理结果翻译给使用者。
为什么要存在内存程序?
1.方便用户操作
2.外壳程序,保护内核
(新命令到来,创建子进程)
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的 且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提 亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫 它王婆,它对应我们常使用的bash。
每次系统启动都会有一个bash的程序,它内部就是一个死循环,不断的进行命令行解释。shell是所有外壳程序的统称(媒婆),bash是其中一个(王婆)。
二.Linux权限的概念与权限管理
2.1Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
su -:重新登录
su:身份切换(不改变位置)
sudo普通用户提权
我们普通用户直接sudo +命令会不能运行。
我们需要用root添加类似白名单一样的东西:
进入之后修改:
为:
这样我的lwz普通用户就可以使用sudo 来进行暂时提权。
2.2Linux权限管理
权限首先限制的是角色(人)。
权限要求目标必须具备对应的属性。
权限=角色+目标权限属性(文件属性)
2.2.1文件访问者的分类(人)
文件和文件目录的所有者:u---User(中国平民 法律问题)(拥有者)
文件和文件目录的所有者所在的组的用户:g---Group(所属组)
其它用户:o---Others (外国人)
上面提到拥有者,所属组,但是没有看到other。因为匹配到的用户不是拥有者和所属组就是other,other很多。
还有一个问题就是:拥有者和other都好理解,这个所属组是什么意思呢?(为了有更精细化的权限管理)假如我是某个小组的组员,我写了一段代码,想给组长看一下我的代码。那么我就必须开放权限给组长,如果只有文件拥有者和other的话,我开放权限就只能开放other的权限,那么其他所有人是不是都可以看见了,为了避免这样的情况发生,就专门设置了一个叫做所属组的东西,使开权限只让所属组看到。
2.2.2文件类型和访问权限(事物属性)
关于文件的权限,以前在C语言学过文件具有读,写,执行权限:
除了第一列的文件类型,后面的九个字符分别代表拥有者,所属组和other的权限位:
总体就是:
2.2.3文件权限值的表示方法
而r,w,x的意思:
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
它们的组合方式:
字符表示方法
八进制数值表示方法
2.2.4文件访问权限的相关设置方法
chmod
用chmod u-r my.txt改变拥有者的r权限:
这里显示的就不在有r。
还有一个问题,先来看:
在正常情况下,这个文件可读可写:
我先把r和w权限去除:
这里再想去读或者写就不行了:
问题就是,虽然我的拥有者权限没有了,但是我依然是所属组里的人,所属组的权限依然在:
因为在确定用户信息的时候,系统会先确定用户是谁,在Centos下,用户角色只确定一次,顺序就是拥有者,所属组和other。像上面的,我本身就是lwz用户,在确定我是拥有者之后就不会再往后面去确认了。
再举个例子:
这里我把拥有组的人改为了root,所属组还是lwz:
之后我再用lwz用户进行写和读就可以了(先与拥有者比较,发现不是再与所属组比):
同理我把所属组的rw权限也给去除,而且所属组的人也给改为root
后面用lwz用户再去写和读依然是可以的,因为other的rw权限是保留的。
我给my.txt给可执行权限,那么这个文件就一定可以执行吗? 肯定不会。
可执行权限!=文件可以执行(要有可执行的那个能力,给了机会你不中用啊)
chown/chgrp
这两个东西的用来更改人的,其实只需要用chown就可以更改全部的了。
把文件给别人必须高权限:
chgrp的用法跟chown一样,不过它改的是所属组。
用chown直接就可以改拥有者和所属组了。
sudo chown root:root my.txt
用八进制改权限
一个数字0-8可以表示所有的改变方案:
2.2.5目录权限
我们进入目录的时候需要的是文件属性的x属性:
比如我把work目录的x属性去除:
r权限的作用:
没有r权限无法查看文件里的内容:
w权限的作用:
下面我们就无法touch新建文件:
对root无效!
所以我们新建一个目录的时候,rwx权限都必须有。任何用户都无法进入其他用户的家目录。
因为它们的权限只对自己有rwx权限:
2.2.6缺省权限
我们在新建文件的时候它们的默认权限:
对于普通文件来讲:起始权限是666,默认不带可执行(除了可执行程序文件)
对于目录文件来讲:起始权限是777,默认带可执行
但是我们创建的文件权限不是很符合这个起始权限:
因为系统会存在一个权限掩码的概念(只看后三位):
最终权限=起始权限&(~umask)
计算过程如下:
umask的目的:我们希望凡是在umask中出现的权限,都不应该在最终权限里出现。
为什么要有umask:默认权限是由OS自主决定,无法在创建之间修改,但是我们如果可以自己配置,可以满足灵活需要。在特殊情况下,配置umask可以控制文件的默认权限,让我们的代码是可控的。
修改umask:
之后创建的目录还是普通文件都不会再有任何权限:
2.2.7粘滞位
目录里文件的删除跟目录本身的w有关,与目录里的文件无关。
前面我们知道,一个普通用户是不可以进入另一个普通用户。那如果我们要进行数据交互的话就需要在公共目录下建立一个两个人都可以进入,改变的目录:
我们可以使用sudo以root的身份创建一个中立的目录:
再给这个目录的other添加w权限:
这样普通用户就可以在这里实现数据交互,但是还有一个问题是,删除文件时跟文件本身无关,跟上一级的w权限有关,上面把w权限放开了那么任何人都可以随便删除里面的文件了。
为了避免这种情况,我们需要一个新的权限(粘滞位),让我们可以在这个目录下新建文件的同时,还不允许里面的文件被其他人删除:
other就被添加上了t :
这样之后,即使我们有w权限也不可以删除其他人的文件了(自己的依旧可以删除):
粘滞位特征:只能给需要共享的目录添加粘滞位。
相关文章:

Linux初识:【shell命令以及运行原理】【Linux权限的概念与权限管理】
目录 一.shell命令以及运行原理 二.Linux权限的概念与权限管理 2.1Linux权限的概念 sudo普通用户提权 2.2Linux权限管理 2.2.1文件访问者的分类(人) 2.2.2文件类型和访问权限(事物属性) 2.2.3文件权限值的表示方法 字符…...

深入剖析 Wireshark:网络协议分析的得力工具
在网络技术的广阔领域中,网络协议分析是保障网络正常运行、优化网络性能以及进行网络安全防护的关键环节。而 Wireshark 作为一款开源且功能强大的网络协议分析工具,在网络工程师、安全专家以及网络技术爱好者中广受欢迎。本文将深入介绍 Wireshark 的功…...

【AIGC】SYNCAMMASTER:多视角多像机的视频生成
标题:SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页:https://jianhongbai.github.io/SynCamMaster/ 代码:https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…...

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统
基于深度学习YOLOv5神经网络水果蔬菜检测识别系统,其能识别的水果蔬菜有15种,# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…...

Redisson中红锁(RedLock)的实现
一、什么是红锁 当在单点redis中实现redis锁时,一旦redis服务器宕机,则无法进行锁操作。因此会考虑将redis配置为主从结 构,但在主从结构中,数据复制是异步实现的。假设在主从结构中,master会异步将数据复制到slave中…...

小结:路由器和交换机的指令对比
路由器和交换机的指令有一定的相似性,但也有明显的区别。以下是两者指令的对比和主要差异: 相似之处 基本操作 两者都支持类似的基本管理命令,比如: 进入系统视图:system-view查看当前配置:display current…...

使用yarn命令创建Vue3项目
文章目录 1.技术栈2.创建流程2.1创建vue3项目2.2选择配置项2.3进入项目目录 3.使用Yarn启动项目3.1安装依赖3.2运行项目 1.技术栈 yarnvitevue3 2.创建流程 2.1创建vue3项目 vue create 项目名称2.2选择配置项 直接回车可选择Vue3 2.3进入项目目录 cd 项目名称默认在当前…...

Three.js+Vue3+Vite应用lil-GUI调试开发3D效果(三)
前期文章中我们完成了创建第一个场景、添加轨道控制器的功能,接下来我们继续阐述其他的功能,本篇文章中主要讲述如何应用lil-GUI调试开发3D效果,在开始具体流程和步骤之前,请先查看之前的内容,因为该功能必须在前期内容…...

K8S集群常用命令
1,查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod,也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod,并且放出的信息更全(包含了pod的ip࿰…...

【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)
目录 1. 例题1:最大连续1的个数 1.1 解题思路 1.2代码实现 1.3 错误示范如下:我最开始写了一种,但是解答错误,请看,给大家做个参考 2. 将 x 减到 0 的最小操作数 2.1解题思路 2.2代码实现 1. 例题1ÿ…...

mayavi -> python 3D可视化工具Mayavi的安装
前言 Mayavi是一个基于VTK(Visualization Toolkit)的科学计算和可视化工具,主要用于数据可视化和科学计算领域。 它提供了一系列的高级可视化工具,包括2D和3D图形、表面和体积渲染、流场可视化等。Mayavi可以通过Python脚本进行调…...

【C++】B2112 石头剪子布
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述游戏规则:输入格式:输出格式:输入输出样例:解题分析与实现 💯我的做法实现逻辑优点与不足 💯…...

【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度
使用 localStorage 存储每个视频的播放进度在组件加载时恢复上次的播放进度在视频播放过程中实时保存进度在组件卸载前保存最终进度使用 timeupdate 事件来监听视频播放进度的变化 在模板中为视频元素添加事件监听: <videoloopautoplaycontrols:id"video_…...

C# 25Dpoint
C# 25Dpoint ,做一个备份 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace _25Dpoint {public partial cl…...

如何制作一个高质量的 Dockerfile 镜像:从入门到实践
Docker 是一种轻量级的容器化技术,能够将应用程序及其依赖打包到一个可移植的容器中。Dockerfile 是构建 Docker 镜像的核心文件,它定义了镜像的构建步骤和配置。通过编写 Dockerfile,我们可以自动化地构建镜像,确保应用程序在不同…...

Linux 机器学习
Linux 机器学习是指在 Linux 操作系统环境下进行机器学习相关的开发、训练和应用。 具体步骤 环境搭建: 选择合适的 Linux 发行版:如 Ubuntu、Fedora、Arch Linux 等。Ubuntu 因其易用性和丰富的软件包管理系统,适合初学者;Fed…...

青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据
青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据 一、UI数据二、Element Plus处理响应式数据三、Vuetify处理响应式数据 课题摘要:本文探讨了UI数据在用户界面中的重要性和处理方法。UI数据包括展示数据、用户输入、状态数据等,对用户体验和应用交互性有直…...

css实现响应式详解
一、媒体查询(Media Queries) 基本概念 媒体查询是 CSS3 中用于根据不同的设备特性(如屏幕宽度、高度、设备类型等)应用不同样式规则的技术。它允许你为特定的媒体类型(如屏幕、打印、手持设备等)和条件&a…...

python-应用自动化操作方法集合
python-PC应用自动化操作 pywinauto:适合Windows系统的软件(GUI),通过遍历窗口(对话框)和窗口里的UI控件进行定位操作,也可以控制鼠标和键盘输入等 https://geekdaxue.co/read/pywinauto-doc-zh…...

mac地址是用来做什么的
MAC 地址(Media Access Control Address)是一个唯一的硬件地址,用于在网络中标识设备。每个网络接口卡(NIC)都有一个唯一的 MAC 地址。MAC 地址是数据链路层(OSI模型的第二层)使用的地址&#x…...

【Compose multiplatform教程】05 IOS环境编译
了解如何使现有的 Android 应用程序跨平台,以便它在 Android 和 iOS 上都能运行。您将能够在一个位置编写代码并针对 Android 和 iOS 进行测试一次。 本教程使用一个示例 Android 应用程序,其中包含用于输入用户名和密码的单个屏幕。凭证经过验证并保存…...

3D滤波器处理遥感tif图像
import cv2 import numpy as np from osgeo import gdal# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # …...

fisco bcosV3 Table智能合约开发
环境 : fisco bcos 3.11.0 webase-front : 3.1.1 console 3.8.0 table合约【3.2.0版本后的】 前言 最近在做毕设,数据的存储方式考虑使用fisco-bcos的table表存储,经过这几天的研究,发现对于fisco2和 fisco3版本的table表合约功能…...

leetcode刷题记录(四十八)——128. 最长连续序列
(一)问题描述 128. 最长连续序列 - 力扣(LeetCode)128. 最长连续序列 - 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复…...

HTML中如何保留字符串的空白符和换行符号的效果
有个字符串 储值门店{{thing3.DATA}}\n储值卡号{{character_string1.DATA}}\n储值金额{{amount4.DATA}}\n当前余额{{amount5.DATA}}\n储值时间{{time2.DATA}} , HTML中想要保留 \n的换行效果的有下面3种方法: 1、style 中 设置 white-space: pre-lin…...

Linux入门——环境基础开发(上)
Linux 软件包管理器 yum 什么是软件包 在Linux操作系统中,安装软件的方式通常较为复杂,其基本流程涉及下载程序源代码并通过编译得到可执行程序。然而,这种方法需要开发者具备一定的编程知识和环境配置能力,对于许多用户而言&am…...

c++类和对象---下
文章目录 一、类的静态成员 1.1.静态成员变量:所有对象共享的成员变量。 1.2.静态成员函数:可以访问静态成员变量,但不能访问非静态成员变量。 二、类的继承 2.1.继承:子类继承父类的成员变量和成员函数。 2.2.多态:基…...

组件中的Props
在项目开发中,在开发某些界面时,我们可以将一些代码封装成组件来简化代码。但是,如果某些情况下组件中的某些属性不是一成不变的(比如一个头像+姓名的组件,每次使用时都需要改变其图像src和姓名字符串),我们就可以使用Props。 我们要使用Props,我们需要先在组件中声明…...

并行服务、远程SSH无法下载conda,报错404
原下载代码无效,报错404 wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh 使用下面代码下载 wget --user-agent"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12…...

迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统-编写 bundle.json文件
bundle.json 文件内容如下所示: 下面是对各个字段的解释: 1. name: "ohos/demos" - 这是组件或项目的名称,这里表示它属于 OHOS(OpenHarmony OS)生态系统下的一个名为"demos"的组件。 2. descri…...