指令的运行原理及Linux权限解读

目录

一. 指令的运行原理

二. Linux下的用户

2.1 Linux的用户分类

2.2 用户之间的切换 

三. 文件权限的概念

3.1 文件类型

3.2 文件的权限

3.3 ls -l 打印文件全部信息的解读

四. 权限的修改

五. 拥有者和所属组的修改

六. 起始权限问题和权限掩码umask

七. 目录文件可读、可写、可执行的含义

八. 粘滞位


一. 指令的运行原理

输入指令的过程,本质上就是输入字符串。指令本质上就是编译好的程序和脚本,被存储在特定的路径下(默认/user/bin/)

我们所有的指令,都要在操作系统OS内运行,但是直接使用OS的难度较高,不适用于普通用户,这就需要图形化界面或命令行解释器来充当中间角色,来让用户方便地使用操作系统。

Linux操作系统没有图形化界面,需要通过指令来进行操作。用户输入指令后,会先发送给命令行解释器进行处理,然后再交给操作系统核心(kernal),并将核心kernal的处理结果反馈给使用者。

图1.1 指令运行的原理

命令行解释器的作用:

  1. 将使用者的命令翻译给操作系统核心(kernal)处理。
  2. 将核心kernal的处理结果翻译过后反馈给用户。

命令行解释器存在的意义:

  1. 对用户输入的命令行进行翻译并交由操作系统运行。
  2. 拦截用户的非法指令,对操作系统进行保护。

二. Linux下的用户

2.1 Linux的用户分类

在Linux下,用户分为超级用户(root用户)和普通用户,普通用户由root用户进行创建。每一个普通用户都有一个家目录/home,存储该用户的相关文件。

root用户创建和删除普通用户的指令为:

  • adduser + 用户名:创建普通用户
  • userdel + 用户名:删除普通用户
  • passwd + 用户名:为普通用户设置密码

root类似于Window下的管理员,root用户基本不受权限的约束,而普通用户会受到权限的约束。

如果我们是普通用户,但希望运行一条需要由root用户执行的指令,那么,可以通过sodo对某一条指令进行提权,语法为:sudo + 指令  -> 输入普通用户密码。

但是,默认情况下普通用户无法使用sudo对某条指令进行提权,需要root用户将该普通用户添加信任之后才可以。

图2.1 使用sudo对某条指令提权

2.2 用户之间的切换 

  • 普通用户 --> 超级用户:su root/su -  -> 输入root用户密码
  • 超级用户 --> 普通用户:su 用户名 -- 不需要输入密码
  • 普通用户 --> 普通用户:su 用户名  -> 要切换到的用户的密码
  • exit:退出当前用户(回到原来的用户) 
图2.1 普通用户切换超级用户
图2.2 普通用户和普通用户见的切换

三. 文件权限的概念

权限,通俗的理解就是一件事是否运行你去做。

  • 权限认证的是身份
  • 权限也与事务的属性有关

3.1 文件类型

Window系统以后缀名来区分文件类型,Linux的后缀名没有特别的意义,但也不是说没用。因为Linux系统上运行的软件,可能需要用到后缀名。

Linux系统通过特定的标识符,来区分文件的类型。

标识符文件类型
-普通文件(源代码、文本文件、可执行程序等)
d目录文件/文件夹
b块设备文件(磁盘文件)
c字符设备文件(键盘、显示器等)
p管道文件(用于计算机通信)

3.2 文件的权限

文件的权限分为:可读、可写和可执行。

在Linux下,权限身份有三种,分别为拥有者、所属组、其他人。root用户和普通用户可以是上面三种身份的任意一种,文件可以为每种身份设定不同的权限。但是:root用户不受权限约束。

权限标识符含义
r可读
w可写
x可执行
-对应的位置没有权限
图3.1 用户和权限身份之间的关系

3.3 ls -l 打印文件全部信息的解读

  • 第一个字符:文件类型。
  • 后面第2-10个字符:每三个一组,对应拥有者、所属组、其他人的权限。
  • 再往后依次为:链接数、拥有者、所属组、文件大小、最后一次修改或创建的时间、文件名
图3.2 文件属性信息解读

对于文件权限的打印,三三为一组,每个位置的含义是确定的(从左往右依次为:读权限、写权限、执行权限),每个位置只有是或者否,用来表征是否具有特定权限。

图3.3 每个位置处权限的含义

四. 权限的修改

文件的权限,可以由文件的拥有者或者root用户来修改。

  • chmod指令:文件权限的增加或删除
  • 语法:chomd u+rwx,g-rwx,o+rwx(新权限) 文件名
图4.1 chmod修改权限的选项
图4.1 使用chmod指令修改文件权限

文件的权限还可以通过八进制数的方式进行修改,每种角色(权限身份)的三个权限信息位置,1表示具有权限,0表示不具有权限。

  • 如:110 -- 具有读权限的写权限,没有执行权限 --> 2^2 + 2^1 + 0 = 6。  
  • 如664:等价于110 110 100,即:拥有者和所属组具有读写权限没有执行权限,其它人只有读权限。
图4.2 采用八进制的方法更改文件权限

五. 拥有者和所属组的修改

  • chown指令:修改拥有者
  • 语法:chown  新的拥有者  文件名
  • chgrp指令:修改所属组
  • 语法:chgrp  新的所属组  文件名

注意:如果拥有者是普通用户,那么它无法通过chown指令和chgrp指令更改拥有者和所属组。因为新的拥有者和所属组用户并未同意接收。但是,由于root用户不受权限的约束,可以直接通过chown和chgrp更改。

图5.1 在普通用户拥有者和root用户下更改所有者和所属组

六. 起始权限问题和权限掩码umask

如图6.1所示,在Linux下,我们所观察到的创建目录的默认权限是775,创建普通文件的默认权限是775。 

图6.1 文件创建后的属性

但是,从理论上讲,Linux默认给目录文件的权限是777,给普通文件的权限是666,这好像与我们看到的相矛盾。

造成这种现象的原因是因为存在权限掩码umask,凡是在权限掩码中出现的权限,都不会在在最终的权限中出现。一般情况下,Linux的默认权限掩码是0002(000 000 010),即:不允许其他人拥有写的权限。

因此:文件最终权限 = Linux默认起始权限 & (~权限掩码)

Liunx默认目录权限777,普通文件权限666,但是文件掩码不允许其他人写,因此目录文件最终权限变为775,普通文件变为664。

七. 目录文件可读、可写、可执行的含义

  • 读权限:是否允许用户查看指定路径下的文件内容
  • 写权限:是否允许用户对目录下的文件进行增、删、改等操作
  • 执行权限:是否允许用户进入对应目录

注:如果执行权限为0,读权限和写权限为1,那么可以读出目录下文件的文件名,但不能读取文件详细的属性,并且不能执行写文件操作。 

图7.1 目录文件权限

八. 粘滞位

有时候我们需要多个用户共享一个文件,但是用户家目录的权限为770,因此,共享文件不会放在家目录下。一般来说,会由root用户,在Linux根目录'/'下创建一个共享文件夹share,share允许所有普通用户读、写、执行(777权限),共享的文件会被放在share文件夹下。

图8.1 共享文件夹的创建和权限修改

在实际项目中,我们在share文件夹下创建一个文献,一般而言,只希望允许他人读文件或执行文件,最多允许他人写文件,却不希望他人可以删除文件。

但是,Linux下文件是否能被删除,不是由文件本身的属性决定的,而是由文件所在的目录决定的。可我们不能将共享文件的写权限改为0,这样在不允许删除文件的同时也禁止了写文件。

为了解决这一问题,引入了粘滞位t,粘滞位是一种特殊的权限,一般而言只存在于共享文件,它只允许文件的拥有者和root用户删除,禁止所属组和其它人删除文件。

  • 添加粘滞位语法:chmod +t 共享文件
图8.1 为共享目录添加粘滞位权限
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值