目录
[sudo 命令](#sudo 命令)
shell的理解
Linux严格来说是一个操作系统,我们称之为 "核心(kernel)",但我们⼀般用户,不能直接使用kernel。⽽是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。
从技术⻆度,Shell的最简单定义:命令⾏解释器(commandInterpreter)。
主要包含:
- 将使⽤者的命令翻译给核⼼(kernel)处理。
- 同时,将核⼼的处理结果翻译给使⽤者。
对⽐windowsGUI:我们操作windows不是直接操作windows内核,⽽是通过图形接⼝,点击,从 ⽽完成我们的操作(⽐如进⼊D盘的操作,我们通常是双击D盘盘符.或者运⾏起来⼀个应⽤程序)。
shell 对于Linux:主要是对我们的指令进⾏解析,解析指令给Linux内核。反馈结果在通过内核运⾏出结果,通过shell解析给⽤⼾。
图理解:

注意:
在shell中,有一个命令行解释器文件(/bin/bash),它的内部是一个死循环,不断得给内核解释我们输入的命令。
怎么理解bash和shell的关系呢?
外壳程序shell往往以进程的形式呈现的,而这个进程不能挂掉,一旦挂掉,其他命令就解释不了了,就需要重新登陆,所以往往会创建子进程来解释命令,就算子进程挂掉了,也问题不大!

这个问题到此为止,我们讲到进程再继续深究!
用户概念
在linux中,有两种用户**:超级用户(root),普通用户**。
这个和windows差不多,windows有管理者(admin)和普通用户。
超级用户权限高,不受管控;普通用户权限底,受管控;
- 超级用户:可以再linux系统下做任何事情,不受限制。
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是"#",普通用户的命令提示符是"$"。

su指令
我们可以使用这个命令,使得用户之间可以互相转换!
操作:

sudo 命令
语法:sudo 指令
功能:获得短暂提权的权利
例子:
比如你需要安装一个软件,需要root权限。

只有在sudo指令的白名单里的用户,才能使用sudo命令!
解决办法:
我们只需要将自己需要使用的普通用户配置到sudo白名单里就行!
文件目录:/etc/sudoers
注意:配置时,需要超级用户才能配置成功!

这样我们就可以使用sudo 命令!
理解权限
我们不难理解,权限的本质就是什么事情能干,什么事不能干!
那为什么要有权限?
因为需要控制用户的行为!不能让用户为所欲为,否则不小把系统文件删除了,系统还怎么运作。
我们来看一个例子:

解释:
这个文件运行不了,是因为它没有可执行的权限,它只是一个文本文件!
那我们平常敲的指令,能执行是因为它们就是一个可执行文件!有可执行的权限!
所以说:权限==用户的权限+文件的权限。
而Linux对于文件的问题,无非就是这三种:读,写,可执行。
我们现在也就围绕这三个来更深入理解在文件方面的权限。
权限管理
⽂件访问者的分类(用户)
- ⽂件和⽂件⽬录的所有者:u---User
- ⽂件和⽂件⽬录的所有者所在的组的⽤⼾:g---Group
- 其它⽤⼾:o---Others
⽂件类型和访问权限(事物属性)
⽂件类型:
- d:⽂件夹
- -:普通⽂件
- l:软链接(类似Windows的快捷⽅式)
- b:块设备⽂件(例如硬盘、光驱等)
- p:管道⽂件
- c:字符设备⽂件(例如屏幕等串⼝设备)
- s:套接⼝⽂件
基本权限:
- 读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权限。
- 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限。
- 执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权限。
命令行理解
看图理解:

缺省权限
我们可以用三个八进制数代表读,写,可执行权限:

对于普通文件来讲:起始权限 666,默认不带可执行。
对于目录来讲起始权限 777,默认都带。

我们来看一下这个。
umask
系统有一个权限掩码的概念:最终权限=起始权限&(~umask)
但凡是出现在umask权限里面,都不应该出现在最终权限里!
解释:

可以修改:

为什么要有umask?
- 默认权限,由OS自主决定,无法在创建前修改,而umask系统可以配置,是一种灵活满足需求的表现。
- 特殊情况下,配置umask,可控制文件的默认权限,让我们的代码都是可控的。
文件权限
chown指令
语法:chown [参数] ⽤⼾名 ⽂件名
功能:修改⽂件的拥有者
常⽤选项:-R递归修改⽂件或⽬录的所属组
注意:只有超级用户才能修改文件的拥有者,哪怕是自己创建的文件都不行!
例子:



目录修改:

chgrp指令
语法:chgrp[参数] ⽤⼾组名 ⽂件名
功能:修改⽂件或⽬录的所属组
常⽤选项:-R递归修改⽂件或⽬录的所属组
注意:普通用户可以将文件的所属组更改为自己所属的任何组。但不能修改到别的组,root才能!
例子:

chmod指令
语法:chmod [参数] 权限 ⽂件名
功能:设置⽂件的访问权限
常⽤选项:
- -R:递归修改⽬录⽂件的权限
说明:只有⽂件的拥有者和root才可以改变⽂件的权限
chmod命令权限值的格式:
- +:向权限范围增加权限代号所表⽰的权限
- -:向权限范围取消权限代号所表⽰的权限
- =:向权限范围赋予权限代号所表⽰的权限
用户符号:
- u:拥有者
- g:所属组
- o:其它⽤⼾
- a:所有⽤⼾
例子:


也可以利用缺省权限来修改文件的权限:

三个指令总结
- 普通用户不能将自己的文件给别人(不能修改拥有者),也就是不能将自己的文件随便给别人!
2.普通用户不能将自己的文件的所属组添加给别人,但是可以添加给自己!也就是说不能将自己文件随便共享给别人!
3文件拥有者才能修改自己的文件(root也能),所属组都不行!
4.root可以干任何事情,上面三点都可以干!
注意:
确定权限信息时,系统会确定用户是谁?是拥有者,所属组,还是other。
在centos下,系统只会确定一次,顺序是拥有者,所属组,other。
例子:

理解文件可执行权限

目录权限
- r :具有浏览该⽬录信息的权限
- w:具有删除,移动,新建⽬录内⽂件的权限
- x:具有进⼊⽬录的权 限
看例子:

那如果两多个需要进行文件之间的协作呢?我们谈一谈!
多用户文件协作
我们先来理解Linux中,用户是怎么隔离的!
任何用户都无法进入其他用户的家目录!root除外!这就已经隔离了!

所以我们需要怎么进行多用户文件协作呢?
我们要的功能是:所有人都能在这个目录下新建,删除等操作,但是不能删除!
我们在系统层建立一个目录(不能放在私人用户目录下),我们再加上 t 权限 :粘滞位。
粘滞位作用:
当⼀个⽬录被设置为"粘滞位"(⽤chmod+t),则该⽬录下的⽂件只能由:
- 超级管理员删除
- 该⽬录的所有者删除
- 该⽂件的所有者删除

而系统里面专门有一个目录来应对这情况:/tmp目录

好了,我们下期见!