shell命令以及运行原理
命令行
而这个命令行运行起来等待我们进行输入起始就是一个循环程序也就是我们的外壳程序。
如下图所示:
shell的定义
由上面的讲述我们就可以知道shell从技术上定义就是:
命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。
对于shell的理解
如下图所示
小曹就是我们的用户
老曹是小曹的父亲还是当地的村长
小帅是小果家里满意的一个男生王婆就是一个媒婆在当地开了一个婚介所,相当于我们的外壳程序
小果就是相当于我们的操作系统
通过上图我们就大概理解了为什么要有外壳程序
- 保护操作系统内核
- 方便我们的用户操作
Linux下的用户
Linux下用户有两种一种是普通用户一种是超级用户
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
su su-命令
这两个命令就是用来切换用户的切换成超级用户要输超级用户的密码不同的是su命令切换用户之后不会改变当时的路径。
sudo命令
该命令用来进行短暂提权需要输入当前普通用户的密码
当时有一个前提就是要添加该用户到一个类似白名单的东西否则执行该命令会报错如下所示
查看该配置文件的指令(该命令只有在你是超级用户才可以):
可以看到里面只有czy没有cdq我们cdq去执行sudo就会报错
如下:
我们用czy去执行
可以看到问创建的1文件被移动到了根目录
权限的理解
权限的本质就是能不能做某件事
为了控制我们的用户防止错误的发生
- 权限首先控制的是人(角色)
- 权限要求目标必须具有对应的属性(就是我们在Linux研究文件那么我们的目标具有的属性就是读写·可执行)
在Linux下我们的角色分三种
分别是拥有者,所属组,和other
文件属性的修改
命令格式:chmod u/g/o/a +/- 对应的权限(w/r/x) 目标文件
u就是拥有者,g是所属组,o是other,a是全部
实例如下图所示:
总结:
- 能改任何人呢的权限吗?:用户只可以改自己的权限
- 没有权限我们访问目标文件会收到限制
- 在centos下用户角色的确定依次顺序是:拥有者,所属组,other
- root用户不受权限的约束
- 可执行权限只是赋予了你权利但是不代表你文件本身就是可执行的
- 文件属性还可以通过八进制数字来改变也就是每三个权限位为一组刚好是三个八进制。如777对应二进制就是111 111 111
表示三个角色都有读写可执行权限
修改文件的拥有者和所属组
命令格式:chown 角色 目标文件改变 改拥有者
chgrp 角色 目标文件 =该所属组
chown 拥有者:所属组 目标文件 两者同时改变
此外我们不允许把某个文件给我们其他人先要交给其他人要有高权限
目录权限
对于目录文件w权限代表可以再目录下删除会新建文件,r权限代表可以目录下的东西,x权限是看是否可以进入该目录。默认情况下我们建立一个目录文件rwx权限都要有。这样就解释了为什么多个用户之间可以实现隔离因为/home路径下的用户对于other可执行权限是没有的因此我们各个用户无法进入到其目录下面。
缺省权限
对于一个普通文件来说起始权限::666
目录文件:777
一个文件的最终权限=起始权限&(~umask)
umask的目的就是为了在umask出现的权限不会出现在最终权限
为什么设计umask:
- a.默认权限,有OS自主决定,无法在创建前进行修改 — 系统可配置,可以灵活满足需要的一种表现
- b.特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码都是可控的。
共享文件
假设有一个问题用户a和用户b需要共同完成一个项目。那就是a和b都可以对该文件进行写入读取。那么该文件应该建立在非/home路径下?为什么呢?因为home路径对于other都是无法进入的。
下面有一个问题来了我们新建了一个目录在根目录下,对于每个人都是权限拉满,那我们想一下a再该目录下建立的文件是不是可以被任何一个用户所删除啊?因此为了解决该问题有了粘滞位的出现对应的就是t。这样该文件就只可以被拥有者删除了(当然超级用户也可以删除超级用户不受权限的限制)。
对应的指令就是:chmod +t 文件或目录