Shell 命令运行原理和权限详解

7d10615e05f05fe08cd33e2e99f6f614.gif

一、Shell命令运行原理

1.Shell

Linux作为一个操作系统,称为"kernel",一般用户不能直接使用kernel,而通过"kernel"的外壳程序"Shell"和kernel进行沟通。

所以广义上Linux发行版=Linux内核+外壳程序,狭义上Linux发行版=Linux内核。

Shell作为外壳程序,包裹在Linux内核外层,是一个应用程序,通过一系列的Linux命令对操作系统 发出相关治疗提供人际界面。它连接了用户和Linux内核,让用户更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。bash是Shell的一种。

Shell命令的执行过程:

fcd1e4599fd943c785b311f4c6a25205.png

Shell有两个作用:

(1)传递请求指令,让操作系统执行命令

(2)保护内核

2.为什么Linux不让用户直接使用kernel

对比windows GUI,用户操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成用户操作(比如进入D盘的操作,用户通常通过双击D盘盘符而进入D盘)。

ede043fadccc6e5e78f3a34f9c88f3bc.png

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

二、Linux权限概念

权限是明确一件事情是否允许被特定的人做。Linux权限能够指定谁可以对文件或目录执行什么操作。Linux下有两种用户,即超级用户和普通用户。超级用户的命令提示符是"#",普通用户的命令提示符是"$"。

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

7b69b287eeead2b080955920d7803b4e.png

普通用户:在Linux下做有限的事情。普通用户的命令提示符是"$"

fd5487c7a876cb09d7c9057a437f27d0.png

两种用户可以互相切换:

7b6b697f39e4608a7a99d7e67775c136.png

也可以使用ctrl + d在普通用户下,切换为root用户。切换成root之后就能提升用户身份,可以执行对应命令。

三、Linux权限管理

1.文件访问的用户分类

用户分为3类:

(1)文件拥有者User---u

(2)文件所属组Group---g

(3)其他Others---o

2.文件类型和访问权限

(1)文件类型

在Linux中,不以文件后缀作为区分文件类型的方式,而是以文件详细列表的第一位进行标识区分:

373791fd2121dbae6187a89c07351c26.png

如上图文件类型有-和d,linux中的文件类型分为以下几类:

d:文件夹
-:普通文件(包括文本、各种静态库、可执行程序、源程序)
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
(2)访问权限

linux对文件有3种访问权限:

r:read,对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

w:write,对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

x:execute,对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

3.权限的表示方法

权限既可以用字符表示也可以用八进制表示

(1)字符表示法
linux表示说明
r--只读
-w-仅可写
--x仅可执行
rw-可读可写
-wx可写和可执行
r-x可读可执行
rwx可读可写可执行
---无权限

对于每一个文件来说,都有3种用户,且每种用户都有3种权限:

39b16dd8187a1ad33c14f6ae172d6c1b.png
(2)八进制表示法
权限符号(读写执行)八进制二进制
r--4100
-w-2010
--x1001
rw-6110
-wx5101
r-x3011
rwx7111
---0000

4.权限的设置

root不受任何权限限制,权限只限制普通用户。

(1)chmod修改文件访问权限

只有文件的拥有者和root可以设置文件的访问权限:

chmod 【参数】 权限 文件名

选项:

R -> 递归修改目录文件的权限

①用户符号+/-/=权限字符

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

例如修改IP.log的访问权限,给user增加可执行权限:

1e81b694093129d7fd92f12f6ce4b188.png

②三位八进制数字

如将IP.log的权限改为拥有者不可读不可写可执行(1),所数组不可读不可写可执行(1),其他人不可读不可写不可执行(0):

363d34b335409ae454a1396bfce928d3.png

虽然delia用户对IP.log不可读,但是root可以读IP.log,这是因为root不受任何权限限制:

1ff7fb56b2e29dc7ebf85e7e0d4700a5.png

如果需要cd进入某个目录,就需要有x权限,如果没有x权限,尽管可以ls查看文件名,但是cd不进去

(2)chown修改文件拥有者

修改文件拥有者:

chown 【参数】 用户名 文件名

选项:

-R 递归修改目录的拥有者

比如将IP2.log文件的拥有者改为用户Gino,必须在root权限下修改,可以切换为root之后:

7133e079ec5f1b0d7db63c7c6ec8b662.png

再修改文件拥有者:

e08c0f839a6cab033e9c16f51fdd8962.png
(3)chgrp修改文件或目录的所属组

修改文件或目录所属组:

chgrp 【参数】 用户组名 文件名

选项:

-R  递归修改文件或目录的所属组

同样也是要有root权限才能修改,如将IP2.log文件的所属组改为Gino:

5a125362c938c4cf77d0a9be1328948a.png

假如想同时修改拥有者和所属组,依旧要在root权限下:

chown 拥有者:所属组 文件名

例如,想将IP2.log的拥有者和所属组都改为root,那么可以这样改:

90874a97ae5d0f0427feb9ff31a14afb.png
(4)umask查看或修改文件掩码

新创建一个文件,访问权限按理来说,应该是777,但是却发现新创建的目录的权限是755:

979ae058b4e8e4830233c609c877cbc6.png

这是因为创建文件或目录的时候还要受到umask的影响,假设默认权限是mask,实际创建出来的文件权限是mask & ~umask。

查看文件掩码:

umask

查看到系统的umask为0022:

a0389972ffc7d1b3df3bfed77fc83ca7.png

只需要关心后3位,实际创建出来的文件权限是mask & ~umask。凡是在umask中为1的位,都要在起始权限中去掉:

1114580e8ff86447b5b2f8d64886a452.png

修改文件掩码:

umask 八进制

将文件掩码由022修改为333,发现创建的新目录的权限也与333对应:

8b991eb614a6f320bff910d258b58284.png

但是如果退出后,重新登录,重新创建新目录,就会发现,修改过的掩码失效了,又变成了022。

e3a566e91a34fdea55a76e32091e049d.png

这是因为掩码设置只在本次登录有效,退出登录就失效了。

(5)目录的权限

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

那么问题来了。只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限,这不矛盾吗?

(6)粘滞位

在root的根目录下,有一个tmp文件夹,这个文件夹下存放的是临时文件,用户在保存文件之前,文件都存放在tmp文件夹中,这个文件夹下存放用户的临时文件,可以看到它的权限有个t:

27af662613213454f7f7cd6a86e26655.png

这个文件夹对拥有者和所属组的权限都是rwx,对other的权限是rwt。这个t是什么属性?和r、w、x有什么区别?

先来看下面的例子,root用户在根目录下创建了一个文件夹test,并在这个文件夹中创建了2个文件test1和test2,然后又root用户切换为delia用户,此时发现delia竟然可以删掉test中的文件:

53e64c0df00ebbf6b92ba64180aa8074.png

这怎么能忍呢?我创建的文件,怎么能够被别人随随便便删掉呢?test目录对other有w和x权限,一旦有w权限,那么也就是other可以对它进行创建文件和删除文件操作。但是不希望一个用户创建的文件被别的用户或删除,那怎么办呢?

在这种场景下,就需要粘滞位,当目录被设置了粘滞位以后,即使用户对该目录有写权限,但是不能删除该目录中其他用户的文件,只有文件的拥有者和root用户才可以删除。这就达到了各个用户可以在目录中读、写、修改、删除文件,但是不能随意删除其他用户文件的目的。

设置粘滞位:

adbb8d7ad52e12143ecd7f8572f65d0e.png

发现设置完粘滞位后,其他用户就不能删除该用户创建的文件了。

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

作者:玲娜贝儿~ 

文章来源:

https://blog.youkuaiyun.com/gx714433461/article/details/127222316

Linux学习指南
有收获,点个在看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值