之前我们一直敲得命令和口口声声说的shell到底是什么呢?命令行提示符和输入的指令并且可以执行都是通过命令行解释器来实现的,那么命令行解释器就是我们常说的shell,具体我们看下面!
一、shell命令以及运行原理
我们用一个简单的例子来理解这个抽象的概念:
对shell的第一次感性认识:
在你很小的时候,对于外界的事物都充满好奇心,是妈妈一点一点来教你并且告诉你,让你从无知到了解。
1.因为我们不擅长与外界交流,所以当你需要和外界信息交互时,妈妈起到了桥梁的作用,解决了你和外界沟通的成本。 2.当外界有不良的、错误的信息或者行为靠近你时,妈妈会直接阻拦,不会向你传递,保护你的安全。 3.妈妈作为你和外界信息交互的唯一途径,当恶意行为来到时,妈妈不会自己上,而是叫你爸或者其他亲戚上,这就保护了妈妈的安全。 以上均为虚构,请勿上纲上线
那么linux内核就是孩子,shell外壳程序就是妈妈,而用户就是外界!
1. 那么回到正题: shell作用一:设立了解决了用户和操作系统沟通的成本。
shell作用二:shell存在的意义,变相的保护了操作系统。 shell作用三:shell外壳是用户和linux操作系统交互的唯一途径,若因为用户的指令导致shell外壳挂掉,那么linux操作系统就不能被用户所使用。 所以shell会创建子进程,让它去执行用户的指令,而shell本身并不执行,所以创建的子进程失败也没事。
那你可能疑惑,这里为什么是linux内核呢?
其实我们谈到linux操作系统,宏观是linux内核 shell外壳,微观是linux内核。
怎么理解呢?类比windows:shell外壳和windows的图形化界面就是兄弟关系。win的图形化界面其实本质就是一种shell外壳程序。我们使用的centos 7 Linux操作系统的shell外壳是bash,bash和shell的关系就像:shell是妈妈,而bash是你妈(不好意思)。所以linux有这么多版本就是因为shell外壳程序有所不同,但也相差不大。
二、Linux权限
在了解权限之前,我们需要了解Linux是多用户操作系统,所以有很多用户,那么他们之间切换是如何进行的呢?
现在的用户是普通用户(Mjcode) 1.如果我们需要切换到root用户,且不想改变当前路径,就需要su
(切换root需要输入root的密码)
(路径没有改变,依旧是Mjcode的家目录) 2.切换root用户,改变路径:su -
3.root用户切换普通用户:su 普通用户
(不需要输密码,直接切换)
所以root是超级管理员,普通用户是受权限约束的用户。
如果执行指定时,用root的身份去执行(对指令进行提权):
sudo 指令 (不需要切换用户)
1.什么是权限
通俗来说,权限是来限制身份的,而不是人。人有很多种身份,当你是学生时,你就有在学校的一些权限,你可以随便进入学校,去上课,去你的床位睡觉,并不是因为你是某某,而是因为你的身份。
那么,文件权限=(人)角色 文件属性
角色有拥有者(user),所属组(grouper),其他(other)
文件属性:r(读),w(写),x(可执行)
当然可执行是针对一些可执行文件,那么linux是怎么来区分文件类型呢? linux文件类型与文件后缀名是没有关系的,因为系统识别文件类型不会根据后缀名来识别。 但是,我们自己仍然可以使用文件后缀来区分(给自己看的,好区分)。我们只说的是linux操作系统不拿后缀名区分,其实有些工具是用后缀名来区分文件类型的。 linux的文件类型:
d:目录文件 那后面的9个字符是什么意思呢?我们往下看
2.怎么阅读权限
我们知道文件权限=角色(拥有者,所属组,其他) 文件属性(r,w,x)
所以:9个字符分为三组,解释就是这个文件的拥有者具有读写可执行权限,所属组有读,可执行权限,其他人有读和可执行权限。
写了这两个,剩下的就是其他。
3.怎么操作权限
权限=角色 属性,那无非就是操作这两个元素:
角色:u(拥有者),g(所属组),o(其他人)。文件是具体用户创建,就会赋予人身份,root创建的文件,那么拥有者就是root,但都是可以修改的。
那么增减一个人的一个权限:chmod 角色 权限 文件名(目录名)
多个人的权限统一修改:chomd a /- 权限 文件或者目录名
对角色进行操作: 修改拥有者和所属组对应的人: 如果你修改用户,必须征得对方的同意,但root不受权限限制,可以直接修改,所以一般修改用户都要提权命令。 拥有者:sudo chown XXX 目录/文件名 所属组:sudo chgrp XXX 目录/文件名 一起修改:sudo chown XXX:XXX 目录/文件名
操作权限还可以用8进制来修改:
4.为什么有权限
当然是因为多用户操作系统,便于系统进行安全管理。
那为什么刚被创建出来的文件权限是我们看到的样子?
这就提到了umask权限掩码
umask权限掩码
linux规定,目录的起始权限是 777;普通文件的起始权限是 666;
但是系统规定:系统会默认配置好umask权限掩码,凡是在umask中出现的权限,都必须在起始权限中去掉。怎么个事儿?来看:
去掉的规则是:最终权限=起始权限&(~umask) umask: 000 000 010 (1代表有这个权限) ~umask: 111 111 101( 0代表没有这个权限) 与起始权限相与,就会把umask中有的权限去掉。
如果我们要进入一个目录,需要什么权限呢?
对!只需要x权限。 r是读取目录的列表;w是在目录中操作;x对于目录就是可进入
所有的目录被创建出来都会有x权限(可进入)
粘滞位
在linux系统中,会由root创建一个公共目录去存放各自的临时文件(tmp)。
但在这个目录中的文件是可以被随便删除的(因为文件是否可以被删除是由他在的这个目录的权限决定的),所以为了防止互相删除,就出现了粘滞位。
粘滞位:chmod t 目录名 就会变为 rwt (操作仅针对目录)
总结:
shell的运行原理和权限想必大家都已经了解了吧!可以课后操作命令去练习,加深印象,我们下期再见!