第三章 Linux中的shell与权限
一、linux的内核(kernel)与外壳(shell)
1、内核与外壳的关系
linux是一个操作系统,linux内核,顾名思义就是linux操作系统的核心。
我们平时输入的命令行,系统是听不懂的,真正在背后实现使用者需求的是linux的内核。
我们本可以直接操作内核,但是这样对使用者的门槛是相当高的。就像很多不懂计算机的人,依然能够轻松调用windows中的软件,或者编辑一些内容。但他们并不是直接去操作windows的核心的。那么为了降低使用的门槛,就在内核的外层包裹了一层外壳。
使用者直接面对的其实是外壳(shell)。比如在windows系统中,相当于shell的其实就是可视化的图形界面。而在我们的linux操作系统中,shell就是我们的命令行指令。
当我们通过一些简单的指令传递给shell的时候,shell会将我们的指令传递给内核,然后内核开始工作,工作结束后,内核将结果反馈给shell,shell再转化为使用者能够看懂的语言反馈给使用者。
所以,外壳是人和linux内核之间沟通的桥梁。
2、外壳的作用
其实根据刚才的介绍,我们或许已经领悟到其中一个作用:方便用户使用操作系统。
还有一个很重要的作用,就是保护内核。
什么意思呢?当用户想要访问一个东西或编辑一些东西的时候,shell会看你有没有权限去执行这些操作,如果没有的话,shell会阻止你访问,防止用户破坏内核。如果内核被破坏的话,很明显,这个系统就崩掉了。
此时,我们就提到了另外一个重要的概念:权限。那么linux的权限是如何体现的呢?请看作者后续的讲解。
二、权限
linux的权限的解析要从两个方面出发:用户和文件。这两方面的共同组成了linux的权限。
1、用户中的权限
(1)超级用户:root
超级用户root可以做任何事情,不受任何的限制。 当我们用root用户去登录的时候,我们的命令行中的提示符是“#”。
(2)普通用户
a.普通用户的创建
增加用户:
adduser 用户名
设置密码:
passwd 用户名
需要注意的是,在设置密码的时候,屏幕上不会显示,设置结束后,直接回车确定即可。
b.普通用户的权限
普通用户就是我们登录linux后,自己创建的用户。普通用户只能linux系统中操作有限的事情。普通用户在使用linux的时候,命令行的提示符是 $。
(3)用户之间的短暂切换
比如某个文件我们身为普通用户是无法访问的,那么我们可以通过下面这个指令实现操作某个文件时的短暂提权。
su 用户名
如果是从root切换暂时切换到其余普通用户,可直接切换。但是从普通用户利用该命令切换到root超级用户,则需要填写root用户的登录密码。
由于是短暂切换,所以我们可以按ctrl + d
切换回来。
(4)单条指令的提权操作
sudo 命令
sudo指令可以在不更改当前用户的情况下对某条指令进行提权操作。
2、文件中的权限
(1)文件访问者的分类
无论我们是超级用户还是普通用户,在面对不同的文件的时候,我们所扮演的角色也是不同的。
面对一个文件的时候,访问者的角色共分为以下三类:
- 文件或文件目录的所有者:User
- 文件或文件目录的所有者所在的组中的用户:Group
- 其他用户:Others
每个文件的权限都是针对三类角色分别提出的。
(2)文件自身的权限
在linux中,我们观察目录下文件的一些详细的信息的时候,会出现一大串信息,如下图所示:
我们发现,在我们创建的目录和文件之前有很多信息,但是这些信息代表什么含义呢?
请看下面的图解:
上述图中的解释,其实就很容易理解了。或许有人会问怎么没写others,其实,这个问题很简单,除了文件所属的用户和文件所属的组之外,其余用户都是others。
但是上面的图中并没有讲解文件所属用户前面的这一堆字母是什么信息,那么接下来,作者将对此进行详细地讲解。
我们解决以下几个问题:
a.后缀与文件类型
我们发现,我们创建的文件中有的是后缀为.cpp的代码文件,还有的是没有后缀的不知名文件,但是这些文件信息中的第一行都是-
,说明在linux系统看来无论这些文件的后缀是什么,对于系统而言,这些文件都是普通文件
。
既然这些文件对于linux都一样,我们是否可以用linux下的编译软件gcc
去编译那些没有.c
后缀的文件呢?
答案是不可以的。
这时候就会有很多人感到疑惑了,为什么呢?不都是普通文件吗?
其实答案很简单,对于linux来说后缀没有用,但是对于linux上下载的软件gcc而言,后缀是起到了作用的。因此,这些文件在面对linux的时候,可能都是普通文件,但是在面对不同的软件的时候,这些普通文件又根据后缀有了不同的分类。
b.rwx是什么
除了第一列以外,还有9列,这9列三个为一组,代表三种不同角色面对该文件的时候,所具备的权限。
对于任意的一组,三个位置都是固定的,分别代表:读 ( r )、写( w )、可执行( x )
这三个之间的顺序是固定的,如果哪一位上是-
,则说明这一位所代表的权限,该角色是不具备的。
比如图片中的第一行:
橘色框中的:
rw-
的含义是,在面对该文件的时候,文件的拥有者可以进行读和写的操作,但是不具备可执行的操作。
三、权限的更改操作
1、语法
chmod u/g/o/a +- rwx filename
上述指令语法中,u代表user,用户。g代表group,即小组。o代表others,即其他。chmod的意思是更改权限,+代表增加权限,-代表取消权限。rwx分别代表阅读,写,执行三种操作。
当然我们还可以采用另外的方式更改这些文件的权限,我们知道在计算机的语言中,0代表假,非0代表真。我们此时可以采用一种二进制的方式去更改,因为二进制是由0和1组成的。恰好分别代表了假与真。
那么我们怎么更改呢?rwx可以看作三位,如果我们输入的是7,7的二进制位是111,三位都是真,代表三个权限都具备。如果我们输入的是5,5的二进制位是101,则说明只用读和执行的权限,没有写的权限。
而我们的用户所扮演的角色有三个,因此我们需要输入三个数字,分别代表三者权限。