目录
一. 指令的运行原理
二. Linux下的用户
2.1 Linux的用户分类
2.2 用户之间的切换
三. 文件权限的概念
3.1 文件类型
3.2 文件的权限
3.3 ls -l 打印文件全部信息的解读
四. 权限的修改
五. 拥有者和所属组的修改
六. 起始权限问题和权限掩码umask
七. 目录文件可读、可写、可执行的含义
八. 粘滞位
一. 指令的运行原理
输入指令的过程,本质上就是输入字符串。指令本质上就是编译好的程序和脚本,被存储在特定的路径下(默认/user/bin/)。
我们所有的指令,都要在操作系统OS内运行,但是直接使用OS的难度较高,不适用于普通用户,这就需要图形化界面或命令行解释器来充当中间角色,来让用户方便地使用操作系统。
Linux操作系统没有图形化界面,需要通过指令来进行操作。用户输入指令后,会先发送给命令行解释器进行处理,然后再交给操作系统核心(kernal),并将核心kernal的处理结果反馈给使用者。
命令行解释器的作用:
- 将使用者的命令翻译给操作系统核心(kernal)处理。
- 将核心kernal的处理结果翻译过后反馈给用户。
命令行解释器存在的意义:
- 对用户输入的命令行进行翻译并交由操作系统运行。
- 拦截用户的非法指令,对操作系统进行保护。
二. Linux下的用户
2.1 Linux的用户分类
在Linux下,用户分为超级用户(root用户)和普通用户,普通用户由root用户进行创建。每一个普通用户都有一个家目录/home,存储该用户的相关文件。
root用户创建和删除普通用户的指令为:
- adduser + 用户名:创建普通用户
- userdel + 用户名:删除普通用户
- passwd + 用户名:为普通用户设置密码
root类似于Window下的管理员,root用户基本不受权限的约束,而普通用户会受到权限的约束。
如果我们是普通用户,但希望运行一条需要由root用户执行的指令,那么,可以通过sodo对某一条指令进行提权,语法为:sudo + 指令 -> 输入普通用户密码。
但是,默认情况下普通用户无法使用sudo对某条指令进行提权,需要root用户将该普通用户添加信任之后才可以。
2.2 用户之间的切换
- 普通用户 --> 超级用户:su root/su - -> 输入root用户密码
- 超级用户 --> 普通用户:su 用户名 -- 不需要输入密码
- 普通用户 --> 普通用户:su 用户名 -> 要切换到的用户的密码
- exit:退出当前用户(回到原来的用户)
三. 文件权限的概念
权限,通俗的理解就是一件事是否运行你去做。
- 权限认证的是身份
- 权限也与事务的属性有关
3.1 文件类型
Window系统以后缀名来区分文件类型,Linux的后缀名没有特别的意义,但也不是说没用。因为Linux系统上运行的软件,可能需要用到后缀名。
Linux系统通过特定的标识符,来区分文件的类型。
标识符 | 文件类型 |
---|---|
- | 普通文件(源代码、文本文件、可执行程序等) |
d | 目录文件/文件夹 |
b | 块设备文件(磁盘文件) |
c | 字符设备文件(键盘、显示器等) |
p | 管道文件(用于计算机通信) |
3.2 文件的权限
文件的权限分为:可读、可写和可执行。
在Linux下,权限身份有三种,分别为拥有者、所属组、其他人。root用户和普通用户可以是上面三种身份的任意一种,文件可以为每种身份设定不同的权限。但是:root用户不受权限约束。
权限标识符 | 含义 |
---|---|
r | 可读 |
w | 可写 |
x | 可执行 |
- | 对应的位置没有权限 |
3.3 ls -l 打印文件全部信息的解读
- 第一个字符:文件类型。
- 后面第2-10个字符:每三个一组,对应拥有者、所属组、其他人的权限。
- 再往后依次为:链接数、拥有者、所属组、文件大小、最后一次修改或创建的时间、文件名
对于文件权限的打印,三三为一组,每个位置的含义是确定的(从左往右依次为:读权限、写权限、执行权限),每个位置只有是或者否,用来表征是否具有特定权限。
四. 权限的修改
文件的权限,可以由文件的拥有者或者root用户来修改。
- chmod指令:文件权限的增加或删除
- 语法:chomd u+rwx,g-rwx,o+rwx(新权限) 文件名
文件的权限还可以通过八进制数的方式进行修改,每种角色(权限身份)的三个权限信息位置,1表示具有权限,0表示不具有权限。
- 如:110 -- 具有读权限的写权限,没有执行权限 --> 2^2 + 2^1 + 0 = 6。
- 如664:等价于110 110 100,即:拥有者和所属组具有读写权限没有执行权限,其它人只有读权限。
五. 拥有者和所属组的修改
- chown指令:修改拥有者
- 语法:chown 新的拥有者 文件名
- chgrp指令:修改所属组
- 语法:chgrp 新的所属组 文件名
注意:如果拥有者是普通用户,那么它无法通过chown指令和chgrp指令更改拥有者和所属组。因为新的拥有者和所属组用户并未同意接收。但是,由于root用户不受权限的约束,可以直接通过chown和chgrp更改。
六. 起始权限问题和权限掩码umask
如图6.1所示,在Linux下,我们所观察到的创建目录的默认权限是775,创建普通文件的默认权限是775。
但是,从理论上讲,Linux默认给目录文件的权限是777,给普通文件的权限是666,这好像与我们看到的相矛盾。
造成这种现象的原因是因为存在权限掩码umask,凡是在权限掩码中出现的权限,都不会在在最终的权限中出现。一般情况下,Linux的默认权限掩码是0002(000 000 010),即:不允许其他人拥有写的权限。
因此:文件最终权限 = Linux默认起始权限 & (~权限掩码)
Liunx默认目录权限777,普通文件权限666,但是文件掩码不允许其他人写,因此目录文件最终权限变为775,普通文件变为664。
七. 目录文件可读、可写、可执行的含义
- 读权限:是否允许用户查看指定路径下的文件内容
- 写权限:是否允许用户对目录下的文件进行增、删、改等操作
- 执行权限:是否允许用户进入对应目录
注:如果执行权限为0,读权限和写权限为1,那么可以读出目录下文件的文件名,但不能读取文件详细的属性,并且不能执行写文件操作。
八. 粘滞位
有时候我们需要多个用户共享一个文件,但是用户家目录的权限为770,因此,共享文件不会放在家目录下。一般来说,会由root用户,在Linux根目录'/'下创建一个共享文件夹share,share允许所有普通用户读、写、执行(777权限),共享的文件会被放在share文件夹下。
在实际项目中,我们在share文件夹下创建一个文献,一般而言,只希望允许他人读文件或执行文件,最多允许他人写文件,却不希望他人可以删除文件。
但是,Linux下文件是否能被删除,不是由文件本身的属性决定的,而是由文件所在的目录决定的。可我们不能将共享文件的写权限改为0,这样在不允许删除文件的同时也禁止了写文件。
为了解决这一问题,引入了粘滞位t,粘滞位是一种特殊的权限,一般而言只存在于共享文件,它只允许文件的拥有者和root用户删除,禁止所属组和其它人删除文件。
- 添加粘滞位语法:chmod +t 共享文件