目录
[命令:su 用户名](#命令:su [用户名])
[1. 文件访问者的分类(人)](#1. 文件访问者的分类(人))
[1' root、user1......对应的是具体的人](#1' root、user1……对应的是具体的人)
[2' 为什么不见other?](#2' 为什么不见other?)
[3' 什么是所属组?为什么要有所属组?](#3' 什么是所属组?为什么要有所属组?)
[2. 文件类型和访问权限(事物属性)](#2. 文件类型和访问权限(事物属性))
[4' eg. -rw-r--r--](#4' eg. -rw-r--r--)
[1. chmod](#1. chmod)
[2. chown](#2. chown)
[3. chgrp](#3. chgrp)
1.shell命令以及运行原理

root@iZ5waahoxw3q2bZ \~# ls -a #后面为命令,#及前为命令行
用户名 主机名 当前用户所处的工作目录
提示符:#:root
$:普通用户
外壳程序{操作系统内核}
命令行#

我们将获取用户输入,将输入的内容交给操作系统,然后操作系统执行,执行完再翻译交给用户
我们称之为命令行解释器
Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)" ,但我们一般用户,不能直接 使用kernel。而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。如何理解?为 什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)
主要包含:
• 将使用者的命令翻译给核心(kernel)处理。
• 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在 通过内核运行出结果,通过shell解析给用户。
1.shell的理解---感性理解

小张特别不擅长和女生打交道,通过王婆去说媒。如烟就是王婆要去说媒的对象
类比:操作系统---如烟,外壳:shell---王婆,用户----小张
小张跟王婆说我就喜欢如烟,王婆传递给如烟,如烟表示不感兴趣,王婆就回来告诉小张
相当于用户输入命令给外壳,外壳把这个信息传给操作系统,操作系统表示执行出错了,外壳返回错误信息给用户!
为什么不让用户去直接访问操作系统呢?因为用户不擅长直接与操作系统交互
用户如果输入一个非常不合理的请求,外壳可以直接拒绝,也变相保护了内核
小张之后再次请求,王婆采用实习生模式,让实习生帮忙做
王婆就是外壳程序,如果有新的命令到来,会创建子进程(实习生)去进行对应的命令
所以
为什么要存在外壳程序?
1.方便用户操作
2.外壳程序,保护内核
3.外壳程序->进程->新命令到来->创建子进程
shell vs bash
如果说shell是媒婆,那么bash就是王婆.shell是所有外壳程序的统称
linux中具体的shell叫做bash,还有其他的叫sh、xsh.....

2.Linux权限
Linux下有两种用户:超级用户(root)、普通用户。
权限高 权限低,受限
windows:管理员(admin)or普通用户
• 超级用户:可以在linux系统下做任何事情,不受限制
• 普通用户:在linux下做有限的事情。
• 超级用户的命令提示符是"#",普通用户的命令提示符是"$"。
接下来
vim myprocess.c

gcc myprocess.c -o myprocess

现在想把我们自己写的这个程序安装到系统中,不想以./的方式执行。
安装的本质就是把这个拷贝到/usr/bin 目录下

我们现在切换用户
命令:su 用户名
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的 口令。
su user1


然后用这个用户去执行

结果发现Permisson denied,权限不允许。usr/bin/ 不允许普通用户修改
然后切回超级用户,cp myprocess /usr/bin 之后myprocess就可以了

普通->超级:su/su -
su不做路径变化,su -做路径变化
权限级别高
超级->普通:su 用户名
不需要密码
本质:可以让用户进行身份变化,提高权限!
3.Linux权限管理
**sudo权限
管理员需要执行的命令
给权限 usermod -aG wheel user1
移除 gpasswd -d user1 wheel**
sudo:是用来进行指定的短暂提权的
比如:安装软件,安装到系统中,需要管理员root权限...其实只安装了一份,允许大家同时使用
人人都是root?
root不给权限就会:
whoami->普通用户->sudo ls->报错

类似于白名单的东西
在这里面改
切换为root用户,

把user1用户添加进去

切回user1用户,然后sudo ls

1. 文件访问者的分类(人)
• 文件和文件目录的所有者:u---User(中国平民 法律问题)
• 文件和文件目录的所有者所在的组的用户:g---Group(不多说)
• 其它用户:o---Others (外国人)
权限
是什么?
权限本质是:能或者不能做什么事情为什么?
1.控制用户行为,防止错误的发生
2.理解:
权限首先限制的是角色"人"
权限要求目标必须具备对应的属性权限=角色+目标权限属性 Linux下一切皆文件,面对的都是文件! ---读、写、执行
角色: eg
1.拥有者 root
2.所属组 user1
3.other
1' root、user1......对应的是具体的人
拥有者、所属组、other是角色 角色由对应的人来扮演
并不冲突,是互相补充的!
2' 为什么不见other?
other不需要记录
只要不是拥有者、所属组,那就是other
3' 什么是所属组?为什么要有所属组?
要精细化的权限管理,首选要有更精细化的的身份角色
2. 文件类型和访问权限(事物属性)
• 文件类型:
◦ d:文件夹
◦ -:普通文件
◦ l:软链接(类似Windows的快捷方式)
◦ b:块设备文件(例如硬盘、光驱等)
◦ p:管道文件
◦ c:字符设备文件(例如屏幕等串口设备)
◦ s:套接口文件 • 基本权限:
◦ 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息 的权限
◦ 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
◦ 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权 限 ◦ "---"表示不具有该项权限
r读、w写、x可执行4' eg. -rw-r--r--
第一个是文件类型
rw- 代表拥有者权限位
三个位置:rw-
代表:允许读、允许写、允许执行
第一个位置:可读就是r否则-
第二个位置:可写就是w否则-
第三个位置:可执行就是x否则-
r-- 代表所属组权限位
r-- 代表other权限位

描述一下,这个文件的权限信息是什么?
该文件的拥有者是user1可以进行读写但不能进行执行,所属者是user1可以进行读写但是不能进行可执行,other对于该文件只有读权限没有写没有可执行
怎么办?实操
文件访问权限的相关设置方法

首先让拥有者u去掉r权限,chmod u-r my.txt,从而就不具备这个权限了
还可以继续加回来

给所有去掉rwx权限

给所有加上r权限,加上w权限

重点部分:
1.能改任何人的所有权限吗? 用户只能更改自己的文件权限
2.没有权限会怎么办? 系统会拒绝让我们访问
3.实际在确定权限信息的时候,系统会先确定用户是谁?拥有者,所属组,还是other?
在Centos下,用户角色确定,只确定一次,顺序是:拥有者,所属组,other
4.root用户的权限
不受权限约束!5.如何理解可执行?
可执行权限 != 文件可以执行
一个文件可不可以执行还是要看本身是不是可执行文件,并不是说有可执行权限x就可 执行 必须两个条件同时满足才可
下图就是想用user1给root的文件改权限,那么就会拒绝访问


此处my.txt的拥有者权限被改为root

现在cat一下
>>重定向一下
为什么现在又能读又能写了呢?
因为系统在确认当前用户对于指定文件的权限时,首先判断当前用户跟所有者比较
结果发现不是,不是就不看拥有者了,就看所属组,然后匹配成功了,于是就可以用所属组的权限了
相当于顺位
权限检查的"顺位"逻辑
当用户访问一个文件(或目录)时,系统按以下顺序判断权限:
第一顺位:用户(UID)
如果当前用户的 UID 与文件所有者 UID 匹配,则应用所有者权限,检查结束。
第二顺位:组(GID)
如果不匹配,则检查当前用户是否属于文件的所属组 (或文件的附加组列表)。
如果属于,则应用组权限,检查结束。
第三顺位:其他(Other)
如果前两者都不匹配,则应用其他用户权限。
权限=角色+目标权限属性
更改人
那么怎么更改人呢?
chown拥有者 chgrp所属组

系统默认不允许我们把文件给别人---是合理的!
想给别人,必须高权限!-------sudo/su(切换为root)
sudo chown user1:user1 root.txt直接一次性把拥有者所属组都改了

3.重谈修改文件属性:
允许读、允许写、允许执行---两态的
r/- w/- x/-
1/0 1/0 1/0
所以说也可也采取八进制方案对文件进行修改
eg. -rw-rw-r--
110 110 100
6 6 4
chmod 000 hello.txt

文件权限值的表示方法
• 字符表示方法
• 8进制数值表示方法
文件访问权限的相关设置方法
1. chmod
功能:设置文件的访问权限
格式:chmod 参数 权限 文件名
常用选项:
• R -> 递归修改目录文件的权限
• 说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
• 用户表示符+/-=权限字符
◦ +:向权限范围增加权限代号所表示的权限
◦ -:向权限范围取消权限代号所表示的权限
◦ =:向权限范围赋予权限代号所表示的权限
◦ 用户符号: u:拥有者 g:拥有者同组用 o:其它用户 a:所有用户
◦ 实例:
▪ chmod u+w /home/abc.txt
▪ chmod o-x /home/abc.txt
▪ chmod a=x /home/abc.txt
• 三位8进制数字
◦ 实例:
▪ chmod 664 /home/abc.txt
▪ chmod 640 /home/abc.txt
2. chown
功能:修改文件的拥有者
格式:chown 参数 用户名 文件名
实例:
• chown user1 f1
• chown -R user1 filegroup1
3. chgrp
功能:修改文件或目录的所属组
格式:chgrp 参数 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
实例: chgrp users /abc/f2
4.三个问题---A目录权限
1.如果我想进入一个目录,需要什么权限?
必须具备x权限,才能进入
2.rw分别对目录意味着什么?
如果对目录没有r,就无法查看目录里面的文件
如果对目录没有w,就无法在指定目录内部新建文件重申:超级用户不受权限约束
所以说,默认情况下,我们新建一个目录,rwx权限都要有!
3.如何理解Linux多用户之间是怎么互相"隔离"的?
任何用户,无法进入其他用户的家目录(除超级用户root)

5.umask
功能:
• 查看或修改文件掩码
• 新建文件夹默认权限=0666
• 新建目录默认权限=0777
• 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的 时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022,普通用户默认为0002。
5.三个问题---B缺省权限
1.为什么默认权限是我们看到的样子?

对于普通文件来说,起始权限666,默认不带可执行
对于目录文件来说,起始权限777,默认携带x
2.为什么跟这个不匹配
因为系统默认会存在一个叫做权限掩码的概念。
最终权限=起始权限 & (~umask) &(按位与)
1.unmask目的是什么?
希望凡是在umask中出现的权限,都不应该在最终权限中出现
2.为什么要有umask?
a.默认权限,由OS自主决定,无法在创建前进行修改---系统可配置,可以灵活满足需求的一种表现
b.特殊情况下,通过配置umask,可以控制文件的默认权限,让我们的代码都是可控的

6.三个问题---C粘滞位
看到一个现象:
一个文件是否能被删除,与文件本身无关,与文件所处的目录w权限有关!
有没有问题?
没有问题
那如果两个文件之间要进行文件级别的协作呢?
不能放在任何一个私人账户里
ls /tmp -d
ls -l /
tmp里面通常放一些临时文件

在非普通账号下建一个,一般放在根目录
这样全系统就能共享
共享类文件,不想让非文件的拥有者删对应的文件
**新需求:任何一个人都能在共享下新建,但是不想让非拥有者删除(**与文件所处的目录w权限有关! )
所以引入一个新的权限标志位:t,粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
1. 超级管理员删除
2. 该目录的所有者删除
3. 该文件的所有者删除
chmod +t tmp/
此时对应的other权限位变为t eg.drwxrwxrwt
此时就删不掉了,权限位约束
让共享情况下,非拥有者不能删除
(当然了对于root来说还是可以删)
粘滞位特征:只能给需要共享的目录添加粘滞位
感谢你的阅读,期待我们下次再见!!!