shell的介绍以及Linux权限的讲解

简介: shell的介绍以及Linux权限的讲解

1 shell命令以及运行原理

1.1 shell命令行的概念

大家在以前的学习中可能会有一个固态的印象:

一台计算机的大概分层为下图

也就是说人可以直接调用计算机的操作系统,但真的是这样吗?

答案是否定的!

其实操作系统还有一个“外壳”:

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

我们举一个例子:

其实用户就是一个大龄未婚的小伙子,他现在看上了一个如花似玉的姑娘(也就是操作系统),想找他做老婆(用户的需求),但是不好意思去找姑娘,于是就到村里找了个王阿姨(shell)去说媒,这就很好理解了吧

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

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

window系统中的图形界面就是一个shell程序,我们点击图标从而完成相应的需求,但是Linux中,shell主要是对指令进行解析,然后交给kernal,反馈的结果通过kernal运行出结果,通过shell解析给用户

1.2 shell外壳程序的意义

那么问题来了,为什么不直接让用户使用我们的操作系统呢?这样不是更方便吗?

这是因为如果让用户直接访问操作系统,它的成本是很高的,并且犯错率也很高,容易出现很多差错,还不如让shell在中间进行传递,降低成本的同时提高系统的准确率

1 是用户和操作系统交互中间的软件层
2 一定程度上可以保护操作系统

2 Linux权限

2.1 Linux权限的概念

Linux下有两种用户:

超级用户(root)、普通用户

这也从侧面反映了Linux操作系统是多用户操作系统,windows也是

从名字上就能看出来哪个用户的权限大,root在Linux系统中只能用无所不能来形容,就这么说吧,root就像是一个古代的皇帝,其他普通用户就是各个地方的亲王,每年都要上贡,但是在自己管辖的区域有一定的权力

我们可以用指令su来切换用户

但是需要密码

su 【用户名】

例如:

指令exit可以用来切换到上一次所使用的用户:

2.2 Linux权限管理

2.2.1 文件访问者的分类(人)

文件的访问者一共可以分为三种:

文件和文件目录的拥有者:u---User
文件和文件目录的所有者所在的组的用户(所属组):g---Group
其它用户:o---Others

例如:

下图中的文件的拥有者和所属组都是root

而其他用户就是说操作系统内其他的普通用户

2.2.2 文件权限值的表示方法

r代表可读,w代表可写,x代表可执行

读r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写w:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“—”表示不具有该项权限

文件的权限是用来限制访问的,权限值可以分为两种方法:

字符表示法:

八进制表示法:

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

其实每个文件访问者对于各个文件其实都有一定的访问权限

我们先来了解一下文件类型

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

为了大家更好地理解上图,请看具体的例子:

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

chmod

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

格式: chmod [用户] +/- 权限 文件名

这里大家要注意一个点:

只有文件的拥有者和root才可以改变文件的权限!

各个字符表示的意思如下:

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

例如:

下图中的文件:

我需要给mytest2改权限:

chmod u+x mytest2  给拥有者加上可执行权限
chmod g+x mytest2 给mytest2文件所属组用户加上可执行权限
chmod o+x mytest2 给其他用户加上可执行权限
chmod a+x mytest2 给所有用户加上可执行权限

此外还有一种八进制的方式:

例如:

chmod 664 mytest2  
chmod 640 mytest2

chown

功能: 修改文件的拥有者

格式: chown [参数] 用户名 文件名

例如:

chown root mytest2   将mytest2的拥有者改为root

可以看到,改变拥有者后jh变成了 root

chgrp

功能: 修改文件或目录的所属组

格式: chgrp [参数] 用户组名 文件名

例如:

chgrp root mytest2  将mytest2的所属组改为root

但是大家有没有发现:

chown和chgrp我在这两个指令之前加入了一个sudo,这是为什么呢?

实际上也可以切换为root来执行这个指令,但是为了方便,我将jh这个普通用户放入了我的信任列表里,至于怎么放,稍后解答!

umask

功能:
查看或修改文件掩码
新建文件默认权限=0666
新建目录默认权限=0777

前面的0不用管,默认第一位都是0,文件夹666就是都没有执行权限,目录777就是三个所有权限都有,我们来验证一下啊:

我们新建了一个文件夹3_20,一个文件3_20_test,这么他们的访问权限和我们默认生成制定的规则不一样呢?

**原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: **

mask & ~umask

umask我们可以叫它权限掩码

那么我们可以查看我们当前系统的umask,也可以设置:

umask  查看系统的权限掩码值

umask 0003  修改权限掩码值

2.3 file指令

功能说明: 辨识文件类型。

语法: file [选项] 文件或目录…

常用选项:

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

例如:

file 3_20

使用 sudo分配权限

想使用sudo指令,我们首先要将当前的用户加入信任列表:

我们需要用vim指令打开一个文件进行修改:

vim /etc/sudoers

至于如何修改,我们下篇博文在做讲解,因为本篇博文还有未涉及到的知识

然后我们就可以调用sudo分配权限了

2.4 目录的权限

在目录中各种权限的解释如下:

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

那么我们就有一个问题出现了:

我们有一个需要注意的点:

一个文件是否能被删除取决于这个文件所在的目录

那么也就是说,只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限,但是这明显有问题啊

我创建的文件,这么情敌还能删除掉我的文件呢?

为了解决这个问题:

就引出了粘滞位!

2.5 粘滞位

当一个目录被设置为**“粘滞位”(用chmod +t)**,则该目录下的文件只能由:

一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

例如:

chmod o+t yw_test

可以看到other用户的可执行权限变成了t,不能删除它

此外,粘滞位大家要注意啊:

1 粘滞位只能给目录设置,文件不能
2 粘滞位设置后一般不能被取消

2.6 权限的总结

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

2 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录有-r 读权限(这

个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)

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

好了,今天的分享到这里就结束了,感谢大家的支持!

相关文章
|
1月前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
13天前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
30 1
linux特殊权限!!
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
62 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
18天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
运维 监控 安全
Linux_权限理解(详细PLUS)
【10月更文挑战第3天】本文介绍了Linux系统中的权限管理基础,包括文件系统对象与权限关联、权限的继承性、字符与数字表示法的解读,以及用户、组与权限的动态交互。详细解析了`chmod`命令的高级用法和权限修改的风险,探讨了SUID、SGID和Sticky Bit等特殊权限的作用机制,并提出了基于角色的权限分配和定期权限审计的最佳实践。
59 11
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
430 2
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
24 0
|
1月前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky