Shell的运行原理以及Linux当中的权限问题
Shell的运行原理以及Linux当中的权限问题
shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。
而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
我们之前学的指令就也叫命令解释器,我们所有的指令最终都要在os的内部运行,但是os使用难度较高,我们用户不能直接和os打交道,因此我们通过命令行解释器或者图形化界面和操作系统打交道。
外壳存在的意义就是1进行命令行的解释 2保护os,对于客户的非法请求,直接拦截。
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
Linux权限的概念
1.我们要认识一下Linux下的分类: *
我们在liunx中一共分为俩类用户:一.root用户(也叫做超级用户),在windows相当于以管理者的方式运行,只不过咱们的root用户的权限更大,二就是普通用户。
root用户基本不受权限的限制,普通的用户受权限的约束。
**这俩个身份是如何自由切换的?**Linux中所有的用户都有自己的密码,无论是root还是多个普通用户都是有自己的密码的。
su指令,我们可以输入su切换到root,但是只是身份的切换,所处的路径是不变的,我们可以使用热键ctrl+D退出去,也可以使用exit命令行退出
也可以使用su -也是可以切换的,但是是以重新登陆的方式进去的,使用热键ctrl+D或者exit退出。
**root 普通用户
su/su - exit /ctrl+d**
在root的用户下 使用su 普通用户是不要输入密码的,直接就可以进入,如果是普通用户的话就需要输入对应账户的密码了。
在root的账户下:
账号的切换是不受约束的,su 用户名直接进去。普通用户需要输入对应的密码,如果我们想要对一个命令进行提权我们可以 使用sudo指令 command(指令)
目前我们adduser新建的用户没有办法执行sudio,系统并不信任你,除非未来将普通用户添加到白名单中。
2.什么叫权限?
简单的话就是说是否允许被你做。
1 权限认证的是 身份 :人+身份角色
角色身份可以分为:拥有者,所属组,跟其他人。
2 权限也跟事务的 属性 有关。
这里的属性我们具体指的的是文件的属性:可读 可写 可执行。
文件的类型:Linux系统中文件的后缀没有直接的意义(当然不代表不用啊)
普通文件:文本,可执行程序,库都属于普通文件。
d:表示目录
b 块设备文件:磁盘
c:字符设备文件:键盘,显示器
p:管道文件:用于进行通信的
Linux是如何看待后缀呢?主要是看用户的需求。
这个表示的是身份,第一个是拥有者的身份,第二个是同属组的身份。
这些表示 字节 日期跟时间。
3权限的修改问题
只有拥有者跟所属组的具有权限修改的权利。
**chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名**
其中 u表示拥有者,g表示所属组,o表示其他人。
我们也可以使用这样chmod a-rwx或者chmod a+rwx 来个所有人加上或减去所有的权限
权限的修改也可以使用八进制或者二进制的方法:
我们使用八进制来修改文件的权限会更加方便,比如我要让这个文件变成只能读不能写也不指向。
我们让文件既能写,又能执行,不能看
既然能修改权限,能不能修改拥有者跟所属组呢?
chown指令
语法规则是 chown +要给的用户名:用户名 文件名
注意的只有root用户能改
5 其他问题(三个问题)
为什么我们创建的文件默认权限是我们所看到的样子??
为什么普通文件是:664?
为什么目录是:775呢?
预备知识:1我们默认给普通文件的起始权限是:666;
2默认给普通目录的起始权限是:777.
umask指令可以加数字权限码;
语法: umask 权限值
功能: 查看或修改文件掩码。
0002叫做权限掩码,凡是umask中出现的极限,不会在最终的文件权限中出现。那么是怎么算出上面的的文件664跟目录665的呢?
文件跟umask有什么关系呢?
最终的权限=起始极限&(~umask);
目录的权限
r:是否允许我们查看指定的目录的文件的内容
w:是否允许我们在当前的目录下进行创建,更改,删除
x:是够允许我们进入
**那么这就会出现一个问题:
只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不合理的。**
为了解决这个不合理的问题,Linux引入了粘滞位的概念。
粘滞位
语法: chmod +t 目录名
功能: 给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。
在家目录下,我在我家创建的文件别人都看不到,有时候我们想多个人共享文件中的数据我们就不能再任何一个人的家目录中。
这个粘滞位:给目录设置,一般是共享文件,大家可以在目标内进行各自的文件的增删查改,只允许所拥有者能删这个文件,其他人一概不允许,t是一种特殊的x权限。(root除外)