shell命令及运行原理
我们使用Linux时,并不是直接访问操作系统,为什么不是直接访问操作系统呢?
如果用户直接访问操作系统,不仅使用难度大,而且不安全,容易把系统文件损坏。
那么我们通常是如何访问操作系统的呢?
我们一般是通过shell外壳程序来访问操作系统的。(图形化界面和指令操作都是操作系统提供的一种外壳程序)
shell外壳的主要功能:
1.将用户的命令进行解析,翻译给操作系统来处理
2.将操作系统的处理结果通过内核进行解析、然后翻译给使用者。
(外壳程序做命令行解析并不是自己做,它主要是接受用户的需求,通过派生子进程的方式,让子进程进行命令行解析以及程序的相关执行。)
简单来说,shell是一种命令行解释器
有时shell会在操作系统不知情的情况下,直接拒绝用户的严重非法请求,以此来保护操作系统。有时,当shell被我们强制要求做一些自己办不成的事,它仍会去尝试。
操作系统有权利拒绝我们做一些指令(例如我们没权限却仍要执行某些操作)。
在Linux中我们主要是使用命令行操作,在Windows中我们主要是使用图形化界面。
我,银行卡,ATM机
我:用户
银行卡:shell外壳程序
ATM机:操作系统
外壳程序(操作系统外壳)存在的意义:
1.做用户与操作系统交互的中间软件层(交互)
2.可以在一定程度起到保护操作系统的作用(不一定是直接保护)
echo $BASH 查看外壳
媒婆:shell
王婆:bash
bash是shell的一种。shell是对bash的统称。
如花:操作系统
张三:用户
王婆:shell外壳程序
权限
Linux是一个多用户的操作系统,可以同时存在多个用户。
root:只有一个,具有Linux下的最高权限
普通用户:可以有多个,但要受权限的约束
权限的核心:用户类别+事物(文件)属性
权限分为对人操作、对角色和文件操作
权限=人+事物属性(r读w写x执行)事物的属性决定其相关权限。
文件类型及权限 用户的拥有者/所属组/other 文件大小 创建/最近修改时间 文件名
1表示为链接文件。
Linux中,不以文件后缀来区分文件类型
文件类型有:
d:目录
-:普通文件
p:管道文件
b:块设备。最典型的块设备就是磁盘设备
c:字符设备。最典型的字符设备就是键盘或显示器
gcc不是Linux系统,它是Linux上的一个软件,它对后缀是有要求的
人:root或其他被添加的用户
拥有者:文件属于谁
所属组:文件属于哪一个组
other:不属于上面两种的任何一个,就是other
rwx分别表示权限读、写、执行
那么如何改权限呢?
改人或改属性都可以。
1.改属性
u/g/o/a:拥有者/所属组/other/全部
chmod u/g/o/a +/- r/w/x filename
即使删除了拥有者的所有权限,拥有者照样可以给自己对该文件加权限。
2.改拥有者、所属组
chown、chgrp
进入一个目录,需要什么权限?x
查看目录下面的文件列表:r
要在目录下创建文件或目录:w
需要超级用户才能直接改拥有者和所属组
Linux默认:一个目录被创建,起始权限是777,一个普通文件被创建,起始权限是666
umask是权限掩码,凡是在umask中出现的权限,都不应该在最终权限中出现。umask最开始那个0先不谈
最终权限=起始权限&(~umask)
如果别人在我的目录下创建了文件,即使我们没有该文件的任何权限(即我们不能对它读写执行),但我们还是可以删掉它的。
我们设置权限用来限制互相之间的读、写、执行,但是我们限制不了别人删除文件。因为这不取决于文件的属性,而是取决于该文件所在目录对于该用户的权限。我们只要将目录对于他们的权限去掉,就可以不用担心别人删掉我们的文件了。
所以我们担心的是与别人在系统某一特定路径特定目录里共同维护文件时,发生互相删除的事情。这种情况下,我们虽然可以不让别人看,但是阻止不了别人删我们的文件。(即大家所有用户都在一个共同的路径下,且对该目录都具有读写执行权限的情况。)
系统中的tmp目录就是系统中存在的所有用户共享的目录,几乎包含所有用户形成的临时文件
我们想要实现有多个用户共享一个目录,且需要在该目录下进行读、写、创建、删除文件的情况,只能让他们自己删除自己的文件,不能删除别人的文件,使用粘滞位就可以。
最后一位为t,这个t是x的一种特殊情况。设置了之后,就只能自己删除自己的文件了。
注意,粘滞位只能给目录设置,且其他用户是不能去掉你的目录的粘滞位的。粘滞位一般是谁设置,谁取消(root)
当一个目录被设置为粘滞位,则该目录下的文件只能由
1.超级管理员删除
2.该目录的所有者删除
3.该文件的所有者删除
进入一个目录,需要什么权限?x
查看目录下面的文件列表:r
要在目录下创建文件或目录:w
写一个简易的shell
第十九节1:45:00-2:48:00 + 第二十节
为什么要程序替换?
程序替换和应用场景有关,我们有时候必须要求子进程执行新的程序
(第二十节 0:00:00 - 2:18:00 一段很重要的复习)
复习
myshell的优化
shell的环境变量是从哪来的呢?环境变量是写在配置文件中的,shell启动的时候,通过读取配置文件来获得起始环境变量