1. 操作系统的外壳
在理解Linux权限之前,我们先来吃点小菜。
1.大部分指令都是文件,如果把指令对应的文件删除了,那么这条指令就使用不了了。
2.用户执行某种功能的时候,不是直接让操作系统执行对应的指令的,而是先交给外壳程序
常见的外壳程序有,图形化界面和命令行。
关于第一条,我们上一节有提过Linux基本指令(下)-CSDN博客
我们的电脑里有着各种各样的可执行程序,比如我们要打开qq,在桌面点击qq的快捷方式,实际上就是点击qq的可执行程序,不过这个过程交给操作系统来做了。一旦删除qq的可执行程序,那么就打不开qq了。
第二条,大家看,下图有什么差别?
图中右边是图形化界面,左边是命令行,这两者都是外壳程序。
外壳程序是什么?
外壳程序实际就是介于用户和操作系统之间的软件,简单来说,就是命令行解释器 。
你通过外壳程序向操作系统发出指令,操作系统通过外壳向你进行反馈。
同时外壳程序会对你发出的指令进行判断,不合法的指令会做处理。
为什么要有外壳程序?
外壳程序承担着用户与操作系统进行交互的重要功能。普通用户不了解操作系统,那么要和他进行交互,只能通过外壳程序。类似Xshell的命令行外壳,使用者自然是程序员等,而图形化界面才是普及大众的外壳,不仅美观,而且操作简便。
用户不善于与操作系统之间进行交互。
外壳shell的存在,可以对请求进行合法性检测,变相的保护操作系统。
2. Linux的权限
2.1 什么是权限?
通俗来讲,权限就是能与不能的概念。你能访问某类资源,也就是你对这类的访问具有权限。
2.2 权限的本质
当你是学生或者教职工的时候,你就能进入学校的大门;
当你是店铺店主的时候,你就能查阅店铺的营销情况。
我们作为用户,可以在leetcode里写代码而不能看电影。
因此权限=人物(角色)+事物属性。
2.3 Linux里的用户
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
类似于公司的老总与普通员工。那么如果老总创了小号,要怎么快速切换老总号与普通号呢?
这里有一个命令:
su [用户名]
在普通用户下,直接su默认进入root,su -也是进入root 。区别在于su -会直接进入用户的家目录
那么我们不想进入root账号,却要行使root的权利该怎么做呢?
在指令前加sudo(提权)但当我们键入密码后,却发现我们收到了警告:用户不在sudoers文件中,并且本次事件将被报告。
在 Linux 中,普通用户默认没有 sudo 权限。这是为了防止普通用户执行一些可能对系统造成损害的命令。 如果普通用户需要使用 sudo 权限,可以通过以下方式进行设置: 1. 将普通用户添加到 sudo 组。 2. 修改 sudoers 文件,允许普通用户使用 sudo 命令。
3. Linux权限管理
3.1 Linux中的文件访问者
linux中文件的访问者共分为三类:
文件和文件目录的所有者:u---User
文件和文件目录的所有者所在的组的用户:g---Group
其它用户:o---Others
3.2 文件类型与访问权限
windows区分文件类别的方式是什么?后缀!
那么Linux也是吗?
不,Linux是通过上图属性列的第一位来表示文件类型的。 (如gcc等工具可能会区分)
1. 文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
2. 基本权限
属性列三三一组,分别代表拥有者,所属组,other
< > 读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
< > 写(w):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
< > 执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
< > “—”表示不具有该项权限
3. 文件权限值的表示
字符表示
八进制数值表示
我们画个图简单举个例子
4. 文件访问权限的相关设置方式
(1) 修改访问者权限
chomd
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
eg:修改file文件权限为:拥有者可读,所属组可读可执行,other无权限
将三个访问者的权限全部打开。
eg:我们编写了一个c语言代码,编译后修改拥有者的执行权限。
但切记,这些权限的修改对root用户是没有作用的。
8进制数值表示方法
拥有者,所属组,other都是三三为一组。
我们把是由否有权限:是用1代替,否用0代替。
那么rw,我们就可以对应的写成110,那么转成八进制就是6,所以6就等于rw的效果。
(2)chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
(3)chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
eg:
4. 目录的权限
在Linux一切皆文件的理念下,目录自然也是文件。
那么目录当然也有权限。
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写
权限。
比如user01有user10用户家目录的写权限,那么user01就可以对user10家目录下的内容进行操作。而目录的内容则包括其下的文件。
5. 默认权限
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。
我们可以看到新建目录的默认权限是0775,新建文件的默认权限是0664。
这是为什么呢?
因为创建文件或目录的时候还要受到umask的影响。
umask 功能:查看或修改文件掩码
假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
我们看看Linux系统文件掩码默认值
eg: 创建文件默认权限是0666,那么0666还要 按位与 上取反的umask的值