1、shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel? 从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
>将使用者的命令翻译给核心(kernel)处理。
>同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运 行出结果,通过shell解析给用户。
>帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的 且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提 亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫 它王婆,它对应我们常使用的bash
2、Linux中的用户及用户切换
Linux下有两种用户:超级用户或超级管理员(root)、普通用户:
*超级用户:可以再linux系统下做任何事情,不受限制 *
*普通用户:在linux下做有限的事情。 *
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令(密码):
su可以切换到超级用户,su -也可以切换到超级用户,它们之间的区别是:
su 仅仅只是切换用户,并不会改变当前工作目录,而su -会切换用户并重新登入shell(会改变当前的工作目录)
3、sudo指令
sudo是用来进行指令的短暂提权的!(第一次提权需要输入自己的密码)
比如:安装软件,安装到系统中,需要管理员root权限。其实只安装了一份,允许大家同时使用!
不过,我们新安装的Linux机器使用普通管理员的身份直接使用sudo进行提权一般都会报错 !
Linux中有一个类似于白名单(被信任的人)的东西,只有出现在白名单的用户才能使用sudo进行提权!不然人人都会是root!
只有管理员root将指定用户添加到白名单后,该用户才能进行sudo提权:
4、角色与目标属性
权限的本质是:能或者不能做什么事情!
权限的意义是控制用户的行为,防止错误的发生。权限首先限制的是角色(人),权限要求目标具备对应的属性。(权限=角色+目标属性)
Linux中包含三种角色:拥有者,所属组,other。 rw对应的权限是读写,x对应的权限是可执行!
怎么不见other呢?other就是除拥有者,所属组之外的角色。
为什么需要所属组呢?更精细化的身份角色是为了更精细化的权限管理。
因此我们可以这样描述上面的文件权限信息:
该文件的拥有者是root,有读写和执行的权限。所属组是root,有读和执行的权限,但没有写的权限。other有读和执行的权限,但没有写的权限。
5、修改权限
5.1修改文件属性(chmod)
操作演示:
重点部分:
1、用户只能更改自己的文件权限
2、没有对应的权限,系统会拒绝我们的访问
3、确定权限信息的时候,系统会先确定用户是谁?拥有者,所属组,other。用户角色只确定一次,顺序是:拥有者,所属组,other。
4、root不受权限约束。
5、一个文件有可执行权限并不等于该文件可执行。
>其实修改文件属实还有另一种方法
我们会发现在9个权限位中,任何一个权限位都是两态的(即可或不可)。那这就可以用二进制的01序列来表示。如:
5.2修改文件角色(chown/chgrp)
如果我们是普通用户,系统默认不允许我们把文件给别人!
想给别人,必须高权限 !
如果我们想要修改所属组,使用chgrp即可 ,我们也可以使用chown来同时修改拥有者和所属组:
6、rwx对目录意味着什么
如果我想要进入一个目录,我需要什么权限?下面来做一个实验。
通过以上实验,我们会发现,想要进入一个目录,我们必须具备对应的x权限!
对于一个目录,其里面的文件和目录就是它的内容,所以:
如果没有r权限,我们就没有办法查看目录里面的文件。
如果没有w权限,我们就没有办法在目录里面删除或新建文件。
所以,我们新建一个目录,系统默认其都会有rwx权限。
7、Linux中多用户之间的相互“隔离”
通过上面用户目录的权限,我们可以得出结论:任何一个用户都无法进入其他用户的家目录。从而实现了多用户之间的隔离!
8、Linux中的缺省权限
对于普通文件来讲,它的起始权限是666实际是(664)。(默认不带可执行)
对于目录来讲,它的起始权限是777实际是(775)。(默认携带x)
为什么默认权限是我们看到的样子呢?
因为系统默认会存在一个叫权限掩码的概念!
最终权限= 起始权限&(~umask)
umask的目的是希望凡是在umask中出现的权限都不会在最终权限中出现。
为什么要有umask呢?
a、默认权限由os自主决定,无法在创建前进行修改 ——系统可配置,可以灵活满足需求的一种表现。
b、在特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码是可控的!
**umask也是可配置的: **
9、粘滞位
一个文件是否可以被删除,与文件本身无关!与文件所处的目录w权限有关!举个栗子:
上面user2目录的拥有者和所属组都是user2,也就是说user2的目录竟然出现在用户user1里面。并且user1对其没有rwx的所有权限,但是我可以把这个文件删除!
究其原因,也就是在我的目录里面的所有文件我都有删除和新建的权限(即使这个文件我不能读,不能写),因为我对于这个目录有w权限!
下面抛出一个问题:如果两个用户要进行文件级别的写作呢?
比如user1负责进行数据的统计,而user2负责拿到user1的数据统计结果进行数据分析。
通过上面的实验,我们可以知道这个协作的文件不能放在任何一个私人账号。因为多用户之间有隔离,通常情况下,我连你的家目录都进入不了,更不用谈访问你的文件。但是我其实可以通过root或者sudo提权进入你的家目录,但我们通常不考虑这种情况。
所以我们就可以在共享类文件当中进行协作,所有人都可以在这个目录当中新建自己的文件,对不同的角色开放不同的权限!Linux中就有一个自带的这种临时共享文件tmp!
但这势必也会引起一个巨大的问题,因为这个共享目录对所有人的权限都是rwx,那也就意味着所有人都可以随便删除别人的文件(因为上面也实验过,删除一个文件与文件本身无关,与文件所处目录的w权限有关)
此时,我们的需求之间就有了矛盾:我们即想要共享文件,又想要自己新建的文件不被别人删除。
而所有技术的出现都是建立在需求之上的!
为了解决这个不科学的问题,Linux引入了粘滞位的概念:
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
*一、超级管理员删除 *
*二、该目录的所有者删除 *
三、该文件的所有者删除
Linux默认自带的共享文件就可以完美解决以上的问题,所以我们一般不需要自己建立共享目录。
版权归原作者 秋风起,再归来~ 所有, 如有侵权,请联系我们删除。