Liunx中shell命令行和权限的理解

news2024/11/20 22:38:12

文章目录

  • 前言
  • 1.shell外壳的理解
  • 2.关于权限理解
    • 1.Linux下的用户
    • 2.角色划分
    • 3.文件和目录的权限
    • 3.粘滞位
  • 3.总结

前言

Linux中的操作都是通过在命令行上敲指令来实现的,本文将简单的介绍Linux中的外壳程序shell以及浅谈一下对Linux中的权限理解。


1.shell外壳的理解

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者.

为了更好理解shell外壳程序,我将画图举例。

在这里插入图片描述
上图中的张三就相当于用户,如花就相当于操作系统。shell程序外壳是一个统称,在Liunx机器中大部分默认shell外壳程序是bash,这个shell程序外壳就相当于媒婆,bash相当于王婆。


综上shell外壳存在的意义如下

1.方便用户进行命令行的传递和返回操作系统的执行结果
2.保护操作系统

最后一点,王婆招聘实习生,相当于执行命令时创建子进程来执行


2.关于权限理解

关于权限的概念,我们日常生活中就有很多例子。比如爱奇艺的某些影片需要会员才能看,小区保安会拦住不是业主的陌生人。因此简单来说,权限是某种事情是否被允许由谁做。权限是用来限制人的,同时访问的对象可能天然不准备某种属性,就会不赋予我们这样的权限。我们不能在爱奇艺上写代码,因为爱奇艺天然不具备写代码的属性。所以,权限就是 人(角色)+ 事务属性。

1.Linux下的用户

刚才提到了,权限是人(角色)+事务属性。在Linux中可以将用户分为两种角色。一种就是超级用户也就是root用户,另一种就是普通用户。root用户的权限是很大的,基本上在Linux中畅通无阻,没有什么权限能够限制。普通用户权限有限,对于某些操作是不被允许的。在Linux中可以通过命令进行用户切换。


在这里插入图片描述


su 用户名 (切换用户)
从root用户切换到普通用户,su后跟用户名即可。从普通用户可以直接su 然后回车。同时需要输入root密码,su -回车会切换到root的用户目录下。su回车,之前在普通用户的当前路径,切换后路径不变。


2.角色划分

当我们使用ll指令时,会出现如下图所示的画面,关于图中的符号我们来详解一下


在这里插入图片描述


在这里插入图片描述

我们知道一般来说东西都有所有者,也是说东西是有主之物。在Linux中,文件和目录也都有所有人。一般来说,哪个用户创建该文件或者目录,哪个用户就是所有者。那么对于其他的用户来说该文件或者目录都是"别人家的"。对于文件来说,除了文件所有者,别的用户都是其他用户,也就是Others。因此对于文件或者目录来说,所有用户可以划分为2个角色 所有者,其他人.

既然可以根据文件的所有权将用户分为所有者和其他人,为什么还要划分出所属组呢?

其实这个也很好理解,我们知道在实际的大型开发项目中,很多人都会共同负责维护同一个模块。那么除了该项目的创建人外,还需要和其他同事一起协作,那么这个项目就不仅仅属于一个人了,而是属于一个组了。这样便于分配不同的权限给不同的角色,有利于更好的管理项目。同时一般文件默认所属组和所有者的用户是一样的。


3.文件和目录的权限

有了上面的角色划分,我们在回过头来看看文件的权限。在谈文件权限之前,我们来看看文件的类型。

Linux中文件可分为以下几种类型

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

Linux中的文件类型和Windows下的文件类型区分方式是不太一样的,windows中是根据文件后缀来区分文件类型的,Linux(操作系统)是根据以上的特定符号来区分的。所以在Linux中我们可以将文件后缀看作为文件名的一部分。


之前提到了文件和目录对角色赋予的权限有3种:读 写 执行,在ll指令下这3者的位置是固定的,同时对于3种角色来说位置也是固定的。3种权限为一组,第一组对应着所有者 第二组对应所有组,第三组对应其他用户。


通过指令是可以更改文件和目录所属组和所有者的


在这里插入图片描述

chown 用户名 文件名 ,(更改文件所有者)
chgrp 组名 文件名 (更改文件所属组)
更改文件所属组和所有者是需要用到root权限的,这也很好理解。当你给予某人东西的时候,请问需不需要征得对方同意呢?那肯定是需要的,不能什么东西都接,万一别人给一口黑锅那肯定是拒绝的。所以在Linux中只能通过root用户的权限强制更改文件的所属组和所有者,让其他用户强制接受。

同时还有一个指令可以更改所有者 所属组 其他用户对文件的权限

chmod [参数] 权限 文件名
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
该指令不需要root权限,文件所有者即可更改

在这里插入图片描述


文件和目录权限另一种表示方法

之前提到了文件和目录对应角色的对应权限的位置是固定的。3种权限为一组,因此可以用8进制来表示文件和目录的权限。1就表示该位置具有对应的权限,0表示对应位置不具有对应权限。举个简单例子777 转成二进制就是 111 1111 111 转成对应位置权限就是 rwx rwx rwx 。再举一个例子 621 转成二进制就是 110 010 001 对应权限就是 rw- -w- --x。


有了上述另一种权限表示法,我们引出另一个问题为啥创建一个文件后默认权限这样的呢?(如下图)
在这里插入图片描述

其实Linux中文件的默认起始权限是666,目录的默认起始权限是777,但是系统为了更好的管理文件和目录权限于是就有了权限掩码,起始权限&(^权限掩码)即为最后用户看到的默认权限。umask指令可以查看系统的权限掩码

在这里插入图片描述
下面我将画图解释上图中的默认权限是664

在这里插入图片描述


同时这个权限默认掩码可以通过umask指令进行修改
在这里插入图片描述


3.粘滞位

在谈及粘滞位之前,我们先搞明白3个问题.
1.查看一个目录下的文件属性需要什么权限呢
2.删除或创建一个目录的下的文件需要什么权限呢?
3.进入某个目录需要什么权限呢?

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


从图中显而易见,当目录赋予某类用户读权限时,这类用户才能查看该目录下文件属性。当目录赋予某类用户写权限时,这类用户才能删除创建该目录下的文件。当目录赋予用户可执行的权限时,该类用户才能进入目录。


在使用Linux时,未来开发过程中可能会产生一些共享目录,该目录一般是由root用户创建,这种目录主要是用来保存普通用户产生的一些临时数据。当目录被共享时,虽然用户会受到权限限制,但是拦不住别人删除其他用户所创建的文件。总不能把写的权限给关了,这样所有人都创建不了自己的文件。为了解决这一问题,Linux中给目录引入了粘滞位的概念。

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

在这里插入图片描述


粘滞位只能设置给目录,因为是目录的权限影响到了文件的删除

3.总结

目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,即使可以执行ls命令,但仍然没有权限读出目录下的文档属性。

  • 权限的存在是为了更好的管理目录和文件,同时也保护了操作系统。以上内容如有错误欢迎指正!

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

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

相关文章

微信小程序开发(一)

1. 微信小程序的开发流程 2. 注册小程序 小程序注册页:https://mp.weixin.qq.com/wxopen/waregister?actionstep1 如已注册,直接登录 小程序后台 https://mp.weixin.qq.com/ 即可。 在小程序后台的 【开发管理】→ 【开发设置】下可以查看AppID&…

算法训练营DAY45|322. 零钱兑换、279.完全平方数

两道题思路上有相似之处,都是求得最少的种类方法,也就是说在完全背包里给定容量时,用最少的物品去装满背包。它和用最多的方法去装满背包也有一些相似,也就是说两者实际上是互通的。 322. 零钱兑换 - 力扣(LeetCode&a…

HTML零散知识

1、代码规范与思路 参考凹凸实验室代码规范:Aotu.io - 前端代码规范 CSS编写顺序的思路 先确定盒子本身是如何布局 position: absolutefloat: left/rightdisplay: flex 盒子的特性和可见性 display: block/inline-block/inline/nonevisibility/opacity 盒子模型…

【Pytorch项目实战】之生成式模型:DeepDream、风格迁移、图像修复

文章目录生成式模型(算法一)深度梦境(DeepDream)(算法二)风格迁移(Style Transfer)(算法三)图像修复(Image Inpainting)(一…

(13)工业界推荐系统-小红书推荐场景及内部实践【用户行为序列建模】

(1)工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 (2)工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 (3)工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

Docker搭建LNMP+Wordpress

一、服务器环境 容器操作系统IP地址主要软件nginxCentOS 7172.18.0.10Docker-NginxmysqlCentOS 7172.18.0.20Docker-MysqlmysqlCentOS 7172.18.0.20Docker-Mysql 二、Linux系统基础镜像 systemctl stop firewalld setenforce 0 docker pull centos:7 #从公有仓库中下载cento…

cubeIDE开发, stm32人工智能开发应用实践(Cube.AI).篇三

一、cube.AI实际项目应用 接篇二,前文都是采用FP-AI-SENSING1案例和配套的B-L475E-IOT01A开发板来阐述的,而实际项目中,我们都是基于自身项目硬件平台来训练模型及部署模型的,我们仅仅需要cube.AI软件包(作为可调用库&…

技术大佬说我对「压测目标」的分析不够细

前言 前面总结压测类型的时候有简单描述了不同压测类型的从准备-脚本设计-压测的整体过程,但是对于压测对象没有更深入的进行分析总结,导致在压测执行结束后,出现压测结果不准确的情况。所以这边就压测的对象进行单独的总结分析。 在执行压测…

lego-loam学习笔记(三)

前言: 对于lego-loam中点云聚类源码的学习,它使用了广度优先算法,并且使用了数组双指针技巧。 主要分为两个部分: 第一个是labelComponents函数,它的功能是为每个点及其相邻的4个点运算角度,在对角度小于…

微信小程序开发

微信小程序开发 | 前言:本文章中的很大一部分内容的图片,文字信息来源于微信小程序官方文档和网络资源,感谢大家的支持,如文章中有不足和错误的地方,请及时联系作者-白泽。并协同修改,相信大家的帮助会使这…

屏蔽360阻止远程执行变更注册表自启动数据的办法

屏蔽360阻止远程执行变更注册表自启动数据的办法 运程服务器上的程序,由于需要。我在服务器中,加入更新升级自身(exe)文件,并变更操作系统自启动数据的代码。 实践证明,通过客户端,调用运程服务…

spring 声明式事务 @Transactional 运行原理

注意:如果想要理解spring 的声明式事务,必须先理解AOP 的原理。 一、spring注册 InfrastructureAdvisorAutoProxyCreator 通过 EnableTransactionManagement 可以看到先把TransactionManagementConfigurationSelector通过Import注册到spring。同时注意…

VULNCMS靶机

环境准备 靶机链接:百度网盘 请输入提取码 提取码:i3j0 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2022.03 信息收集 1.查看靶机ip地址 2.探测目标靶机开放端口和服务情况。 nmap -p- -sV -A 192.168.1.108 漏洞…

嵌入式串行接口标准

在嵌入式系统中,经常使用UART接口实现通讯、调试日志数据等功能,但UART是一种异步通信协议,并未定义物理层的电气接口标准。 在板件通信时,UART接口之间通常基于IO直接连接进行通信(TTL/CMOS电平标准,3.3V电…

梦熊杯-十二月月赛-白银组题解-B.契约

B. Problem B.契约(contract.cpp) 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述: 「璃月」是「契约」的国度。 摩拉克斯认为&#xff0c…

Lua 字符串

Lua 字符串 参考至菜鸟教程。 字符串或串(String)是由数字、字母、下划线组成的一串字符。 Lua 语言中字符串可以使用以下三种方式来表示: 单引号间的一串字符。双引号间的一串字符。[[ 与 ]] 间的一串字符。 以上三种方式的字符串实例如下: string1 …

基于语义分割Ground Truth(GT)转换yolov5目标检测标签(路面积水检测例子)

基于语义分割Ground Truth(GT)转换yolov5目标检测标签(路面积水检测例子) 概述 许多目标检测的数据是通过直接标注或者公开平台获得,如果存在语义分割Ground Truth的标签文件,怎么样实现yolov5的目标检测…

【图论】求欧拉回路

前言 你的qq密码是否在圆周率中出现? 一个有意思的编码问题:假设密码是固定位数,设有nnn位,每位是数字0-9,那么这样最短的“圆周率”的长度是多少?或者说求一个最短的数字串定包含所有密码。 理论 一些…

acwing1264_动态求连续区间和

目录 算法分类: 问题描述 算法适用题目范围: 实现代码: 算法分类: 树状数组/线段树 问题描述 给定 n个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b]的连续和。 …

1602_MIT 6.828试验环境搭建

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 最近尝试看一下MIT的操作系统教程,找到了一个6.828的课程。看了一下网络上的介绍,看起来这个大家的认可度还是很高的。开动之前&#xff0c…