1.shell命令行的概念以及原理
首先,用户下达指令需求。此时Linux操作系统的内核kernel,并不会直接接收用户下达的指令,因为操作系统不擅长跟用户打交道。那么指令要如何下达呢?这就命令行解释器来对用户的指令进行处理。
1.1.shell命令行的介绍
shell对于Linux主要是对指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。这里我就简单举一个样例。比如在我的宿舍里有一个哥们儿,他非常的内向害羞,他很喜欢我们班的班花。由于他不敢开口向班花表白,他就托我去班花的宿舍门口去替他表明他对班花的爱慕之情。于是乎我就跑了过去,跟班花说明了他对她的爱意。很可惜,班花并不喜欢他。我回到了宿舍将情况跟他进行了说明。他直接就玩起了原神,堕入了虚拟的世界中。第二天,我觉得有些许过意不去,就又去找了班花,想替他撮合撮合。可惜,这是我看到了班花和她的男朋友走在一起,于是乎我识趣的溜了。这里班花就是Linux操作系统的内核,我就是shell程序,而我的舍友就是用户。
2.Linux权限的概念
2.1.Linux用户的分类
Linux下用户分位两种:root用户(超级用户)和普通用户。两者之间的区别是root用户基本不受权限的约束,而普通用户受权限的约数。用户之间是可以切换的。每个用户都有与之对应的密码,平时我们在学习的时候,建议root用户和普通用户的密码不一样,这样可以避免不必要的错误。
2.1.1.su指令
适用于切换当前的用户,可以带 - 选项。下面我就通过样例进行演示。
su usrname
su -
2.2.什么叫权限?
在生活中,我们不免会使用视频播放软件追剧。当我们想要追一些当下热门的剧时,点击进去提示你,你不是vip不能看当前电视剧。这就是生活中一个简单的权限现象。当你充值了vip你就具备了看剧的权限,这是因为vip这个身份所带给你的权限。权限的本质其实就是一件事能否被你做。Linux权限是指在Linux系统中,对文件和目录进行访问控制的权限。
2.3.文件的属性
权限也和属性是息息相关的。举个例子,你有一本笔记本,你可以对它进行写、读等操作,这是因为它本身就自带这些属性。那你可以吃它吗?显然是不行的,它不具备被食用的属性。Linux系统中文件的第一个属性表示文件的类型。
- 表示普通文件,文档文件、源代码文件和库文件等都属于普通文件
d 表示目录文件
b 表示块文件,如硬盘文件
c 表示字符设备文件,如键盘文件、显示器文件等
p 表示管道文件,用于通信
2.4.后缀名的意义
在Linux系统中,文件的后缀名并没有直接的意义。后缀名取决于用户的需求。下面我举一个后缀名有意义的样例
2.5.权限身份的介绍
Linux中文件的权限身份分为三种分别是:拥有者、所属组、其他人。为什么有了拥有者和其他人还需要所属组这个权限身份呢?这里我举一个例子,假设,现在你和你的舍友一起去了一家公司实习,你在A组,他在B组,你们公司只有一台Linux机器。一天你写了一段很棒的代码,由于你们是不同的小组,你不希望它看到你的代码。此时你就将其他人的读属性设成-。他就没法看到你的代码了。但是,你的领导想看看你最近写了啥代码,这是你就陷入难关,如果只有其他人和拥有者这两个权限身份的话,你无疑需要开放其他人权限身份的读权限,那么你的舍友也就会看到你写的代码了。这时,所属组作用就出来了,你可以将你的领导拉入你的所属组中,并配置相应的所属组权限。这样其他人访问不了你的代码,而你的所属组成员可以访问你的文件。
2.6.权限身份对应的文件权限
权限(八进制) | r (读) | w(写) | x(可执行) |
---|---|---|---|
000 | - | - | - |
001 | - | - | x |
010 | - | w | - |
011 | - | w | x |
100 | r | - | - |
101 | r | - | x |
110 | r | w | - |
111 | r | w | x |
权限身份对应的文件权限通常三个代表一个位置,分别对应r/-,w/-,x/-
即读、写和可执行权限,而-表示没有该权限。所以权限是一个二元制的,身份权限也是可以以8进制来表示。
2.7.权限的修改以及现象
简单介绍权限修改指令为chmod。
chmod 权限身份+rwx 表示读写可执行权限都打开
chmod a-rwx 表示所有人所有权限都关闭
chmod 777 表示所有人所有权限都打开
chmod 776 表示拥有者和所属组有读写可执行权限,其他人只有读写权限
下面简单举例来看看权限约束的现象
chown指令用于修改文件的拥有者,chgrp指令用于修改文件的所属组。这是两条需要具备root权限的指令,普通用户若想使用这两条指令需要进行sudo提权。
sudo chown xxx:xxx 修改当前目录下的拥有者和所属组
sudo chown xxx 修改当前目录下的拥有者
sudo chgrp xxx 修改当前目录的所属组
此时,xyx用户就不具备对文件的写权限,仅可读。root权限对于文件的拥有者和所属组具有修改权限。
2.7.1.关于所属组和拥有者权限不同的现象
假设,我既是文件的拥有者也是所属组身份,但是,拥有者只有读权限,而所属组具有读写权限。此时,我读取文件没有问题,那写入文件是否有问题呢?下面我们直接上实操。
2.8.权限掩码的概念
这里我们创建两个文件和两个目录,来看看系统默认的身份权限。
其实身份权限 = 默认身份权限 & (umask按位取反)。而普通文件默认权限为666 ,目录文件的默认权限为777。输入umask指令,可以查看当前系统下的权限掩码。
下面我简单的对上面普通文件和目录文件的身份权限进行计算演示
umask xxx即可修改当前的权限掩码。
2.7.2.关于目录文件的权限现象
前面简单介绍了普通文件的各个权限的所对应的行为,下面介绍目录文件的各个权限所对应的行为。首先是读权限,读权限所限制的是查看当前目录下的文件内容。
而目录文件的写权限是用来限制在当前目录下的创建、删除以及修改等操作。
相对应的可执行权限其实就是决定了我们能否打开这个目录。
从上面的样例中,可以看到一个有趣的现象,虽然test01目录我们不具有可执行权限。但是,这并不妨碍我们查看它的文件内容。这就好比,你们在班上有一个不喜欢的同学叫张三,一天,你和几个同学一起去踢球,张三也想加入你们。但是,你们却说不允许他进入绿茵场,张三于是乎退到了不远处的绿荫下看你们踢球。这时候你们不乐意了,过去问候张三,张三这时候说你们有什么证据说我在看你们呢?我看的是操场上跑步的女生。
2.9.粘滞位
我们在Linux下同一个终端不同用户要共享资源,不能任何一个人的家目录下进行的。这是因为任何人的家目录只有拥有者具有读、写、可执行权限。这时我们就需要建立一个公共目录来进行资源的共享。
请看下面的样例演示
在我创建的share目录下,我创建了一个共享目录里,并写了一个文本文件,一天我的舍友想看看我在这个目录里写了啥,于是乎他cat了我写的文本文件。但是,我不行让他看见,所以我把ohter的读权限给关闭了。可是他居然把我的文件给删了,这就让我就得很爽了,因为删除文件的权限取决于目录权限,如果我把目录权限下的写权限关闭,那我还怎么创建文件呢?这时候就需要粘滞位来保证我们在共享目录下的文件不会被随意删除。
chmod o+t 表示对于other身份添加粘滞位
补充:粘滞位一般是给目录配置的权限,一般是用于共享的目录。一般配置了粘滞位,只有文件的拥有者和root能够删除。t是一种特殊的x权限。