目录
[su -](#su -)
[su 用户名](#su 用户名)
[创建管道文件的指令: mkfifo](#创建管道文件的指令: mkfifo)
[chmod u+或-??? g+或-??? o+或-???](#chmod u+或-??? g+或-??? o+或-???)
[chmod a+或-???](#chmod a+或-???)
[格式1:chown 用户名 文件名](#格式1:chown 用户名 文件名)
[格式2:chown 拥有者:所属组 文件名](#格式2:chown 拥有者:所属组 文件名)
1.指令的运行原理
bash命令行
例如以下内容:

@前的guest是用户名,@后的zhangcoder是主机名,~/folder是当前目录,对于普通用户,$是命令提示符

对于超级用户root,#是命令提示符
(~表示该用户的家目录)
1.输入指令的过程,实际上就是输入字符串
2.指令的本质是执行特定路径下的编译好的程序和脚本
3.而通过图像化界面或者命令行解释器来与操作系统对接,帮助用户运行指令,如下图:

Shell简单的定义
由于Shell是Kernel的"壳",可通过Shell与Kernel沟通
是命令行解释器,将使用者的命令翻译给核心(Kernel)处理,同时,将核心的处理结果翻译给使用者
命令行解释器存在的意义
1.解释命令,方便用户使用
2.拦截非法指令,防止破坏操作系统
2.用户权限
定义
指的是某个特定的用户具有特定的系统资源使用权力,可以简单理解为权限==人+事物的属性,分两类:
1.权限和"人"有关,是普通用户?是超级用户?
2.文件可读?可写?可执行?
用户的分类
root:超级用户,基本不受约束,具有最高权限
普通用户:是通过手动新建得到的,有权限的约束
无论是超级用户还是普通用户都要设置密码
单独一个su
观察使用su指令的前后

用户: 从guest切换到了root
路径: ~/folder和/home/guest/folder是等价的
结论: su指令仅切换身份,没有改变所处的目录
su -
观察使用su -指令的前后

用户: 从guest切换到了root
路径: 从~/folder切换到了~
结论: su -指令切换身份,并改变所处的目录为根目录
su 用户名
以普通用户的身份使用"su 用户名"需要密码,而以如果以root的身份使用,不需要输入密码(root有最高权限)
使用su后如果想退出,可以使用exit指令或者按下Ctrl+D

sudo+指令
作用:前缀sudo对一条指令提高权限(变为root)
如果出现画红框的内容,说明当前普通用户不在系统信任的白名单sudoers里,需要手动添加该用户至sudoers

3.文件权限
三种:1.可读 2.可写 3.可执行
以下面三个文件为例子,看画红框的部分
先看第一列
文件的类型(Linux后缀名没有直接的意义,因为用文件属性来区分文件的类型,一般不用文件的后缀名)

-指的是普通文件(例如文本,可执行程序),d指的是目录文件,其他: b指的是块(b lock)设备文件(例如磁盘文件),c指的是字符(c haracter)设备文件(例如键盘,显示器),p指的是管道(pipeline)文件
解释文件后缀名没有直接的意义

a.txt通过后缀名看,貌似是txt文本文件,但是中有x,是可执行文件
虽然文件后缀名没有直接的意义,但不代表后缀名没有用,后缀名可用于软件识别文件类型

修改后缀名为.c后,gcc执行没有问题

gcc和Linux操作系统不同,gcc是运行在Linux上的软件,和操作系统无关
块(block)设备文件举例

字符(character)设备文件举例

管道(pipeline)文件举例
创建管道文件的指令: mkfifo
mkfifo的fifo是f irst i n f irst out的缩写

fifo可用于终端之间通信
按图操作演示即可:

3种角色
拥有者,所属组和其他人
拥有者: 创建了一个文件,简单理解为文件的创建者就是文件的拥有者
所属组: 例如一个服务器上有多个小组在用,不同组负责不同的项目,有对应不同的目录
其他人: 除了拥有者和所属组之外的其他人
root、普通用户和3种角色的对应关系如下:

即: 具体的人(超级用户和普通用户)对应不同的角色(拥有者,所属组和其他人)
剩余几列

r表示可读, w表示可写,x表示可执行,-表示对应权限的位置没有权限
对应权限的位置没有权限的理解:
例如下图画圈的-,为没有可执行的权限(从左向右依次为是否可读、是否可写、是否可执行)

要分3组看,每3列为1组:

每组的权限依次属于拥有者、所属组和其他人
后面两列依次指的是拥有者和所属组的具体名称

最近创建或修改的时间(下图画框的部分):

练习:描述下图1.c文件的权限

分角色描述即可:
对于拥有者,有可读可写的权限,但没有执行的权限;对于所属组,有可读可写的权限,但没有执行的权限;对于其他人,只有有可读的权限,没有可写和执行的权限;
实验:以其他人的身份修改文件
1.c是guest用户创建的,对于其他人只有可读的权限,则以zhang用户的身份修改1.c文件,会报错

但如果以root身份向1.c文件写入字符串,是可以的,因为root具有最高权限

4.文件权限的修改
chmod指令
能更改文件权限的只有拥有者和root
全称:change mode,注:chmod虽然修改了权限,但对root而言是没有用的.因为root具有最高权
chmod u+或-??? g+或-??? o+或-???
以三个具体的指令来看用法:
cpp
chmod u-r--,g-w-,o-rw- 1.c
解释:u,g,o后面都紧跟着一个**-,表示去除权限**
对于拥有者(u),只去除权限r,对于所属组(g), 只去除权限w,对于其他人(o),去除权限r和w
执行结果:

cpp
chmod u+rwx,g+rwx,o+rwx 1.c
解释:u,g,o后面都紧跟着一个**+,表示添加权限**
对于拥有者(u),所属组(g), 和其他人(o),都添加权限r、w和x
执行结果:

3.也可以只修改其中某个角色的权限
cpp
chmod u+rw- 1.c
*注:有可执行权限不代表文件可执行,是否可执行要看文件本身
结论:+为添加权限,-为去除权限
chmod a+或-???
选项a代表所有人(拥有者、所属组和其他人,即all的首字母),chmod a+或-???代表对所有的"人"操作
现有以下test.txt文件

要对所有人添加可执行权限,可写如下指令:
bash
chmod a+x test.txt

要对所有人去除所有权限,可写如下指令:
bash
chmod a-rwx test.txt

使用8进制数值修改权限
遵循以下表操作:
|-----|-----|--------------|
| 八进制 | 二进制 | 权限 |
| 0 | 000 | --- |
| 1 | 001 | --x(只可执行) |
| 2 | 010 | -w-(只可写) |
| 3 | 011 | -wx(可写可执行) |
| 4 | 100 | r--(只可读) |
| 5 | 101 | r-x(可读可执行) |
| 6 | 110 | rw-(可读可写) |
| 7 | 111 | rwx(可读可写可执行) |
有以下test.txt文件

执行指令:
bash
chmod 123 test.txt
123:1为拥有者权限,2为所属组权限,3为其他人权限
查表可知:
|---|-----|------------|
| 1 | 001 | --x(只可执行) |
| 2 | 010 | -w-(只可写) |
| 3 | 011 | -wx(可写可执行) |
对于拥有者,test.txt只可执行
对于所属组,test.txt只可写
对于其他人,test.txt可写可执行

chown指令
作用:修改文件的拥有者(全称: change owner)
格式1:chown 用户名 文件名
guset用户下执行指令:
bash
chown zhang test.txt
但发现服务器拒绝执行:

一般有两种解决方法:
解决方法1:提高权限
bash
sudo chown zhang test.txt
解决方法2:切换到root下执行

格式2:chown 拥有者:所属组 文件名
切换到root下执行以下命令:
cpp
chown root:guest test.txt
发现已经修改了拥有者和所属组:

chgrp指令
作用:修改文件的所属组(全称: change group)
和chown一样,一般有两种解决方法:提高权限或者切换到root下执行

*注:other没有单独的指令,chown和chgrp已经间接修改了other
4.权限在进行认证时,只能以一个身份认证
现对test.txt做如下处理:
guest账户下对guest家目录的test.txt处理:
bash
chown guest:guest test.txt
chmod u+r-w-x,o+r+w-x test.txt

对test.txt写入数据,看看有什么反应:
发现拒绝访问

奇怪的是拥有者和所属组都是guest,而且所属组具有写权限,为什么不能向test.txt写入数据?
引出以下结论:
结论:权限在进行认证时,只能以一个身份认证,++先看拥有者,再看所属组++.如果拥有者满足,不会看所属组