shell命令以及运行原理
什么是shell
-
shell是操作系统的外壳程序统称,我们是通过shell去和操作系统沟通的。
-
从技术角度,shell最简单的定义就是命令行解释器,主要包含两个功能:
-
将使用者的命令翻译给核心处理
-
将核心的处理结果翻译给使用者
为什么需要shell?
-
Linux严格意义上来说是一个操作系统,我们将其称为核心(kernel)。但我们一般用户不能直接使用核心(kernel),而是通过核心的外壳程序(shell)来和核心沟通,为什么呢?主要原因就是,使用者所写的命令行核心看不懂,而核心的处理结果使用者也看不懂,在他们(使用者和核心)之间需要有一个翻译。
-
一个比方:假设你自己是一个企业家,你的产品非常优秀。名声传到了国外,国外有一个客户对你的产品很感兴趣,想要和你聊聊投资合作的事情,但你们之间语言不通,需要找一个翻译来帮助你们进行沟通以促成这笔生意。这个翻译就是shell,你就是使用者,核心就是外国客户。
shell对于Linux和Windows GUI对于Windows的区别
-
我们在使用Windows时也不是直接操作Windows操作系统,而是通过图形化接口、点击,从而完成我们的操作,这些图形化结构、点击就是window的外壳程序。
-
shell对于Linux和window的GUI对于window是一样的,我们也不是直接给核心下指令,而是将指令给shell,让shell翻译我们的指令给Linux内核,反馈的结果再通过shell翻译给我们。
shell和bash、sh的关系
-
可以简单的理解为shell是总称,bash、sh是具体的外壳。好比警察(shell)和李警官(bash)、王警官(sh)的关系
总结
-
shell存在的意义:
-
命令解释
-
保护内核
Linux权限
Linux权限的概念
Linux下的两类用户
-
超级用户(root):可以再Linux系统下做任何事情,命令提示符是‘#’
-
普通用户:在Linux下做有限的事情,命令提示符是‘$’
Linux下的用户切换命令
-
命令:
-
su[用户名]
-
功能:切换用户
-
su -
-
功能:重新登陆root
Linux的权限管理
文件访问者的分类
-
文件和文件目录的所有者(主人)
-
文件和文件目录的所有者所在组的用户(主人的同时)
-
其他用户(主人不认识的人)
-
一个组里面可以只有一个人
文件类型和访问权限
-
Windows和Linux区分文件方式的区别
-
Windows区分文件类型是通过后缀
-
Linux区分文件类型与后缀无关,和文件是否具有“可执行权限”有关,但不代表不用后缀
-
Linux后缀的意义:给人看的
-
只是Linux不区分后缀,不代表Linux上的软件不区分后缀
-
详情见图
-
文件类型分类
-
d:文件夹
-
-:普通文件
-
l:软连接(类似于Windows的快捷方式)
-
b:块设备文件(例如硬盘、光驱等)
-
p:管道文件
-
c:字符设备文件(比如屏幕等串口设备)
-
s:套接口文件
-
基本权限
-
读(r):对于文件来说,具有读取文件内容的权限;对于目录而言,具有浏览该目录信息的权限
-
写(w):对于文件而言,具有修改文件内容的权限;对于目录而言,具有删除移动目录内文件的权限
-
执行(x):对于文件而言,具有执行文件的权限;对于目录而言,具有进入目录的权限
文件权限值得表示方法
-
字符表示方法
-
r--:只读
-
--x:仅可执行
-
-wx:可写可执行
-
rwx:可读可写可执行
-
-w-:仅可写
-
rw-:可读可写不可执行
-
r-x:可读可执行
-
---:什么都不能干
-
8进制表示方法
-
r:4 100
-
w:2 010
-
x:1 001
-
rw:6 110
-
rx:5 101
-
wx:3 011
-
rwx:7 111
-
---:0 000
-
记忆方法:第一个对应着读、第二个对应着写、第三个对应着执行,对应的位置唯一就代表具有哪个权限
文件访问权限的相关设置方法
-
设置文件的访问权限的命令
-
语法(格式) chmod[参数] 权限 文件名
-
功能:设置文件的访问权限
-
常用选项:
-
R-> 递归修改目录文件的权限 注:只有文件的拥有者和root才可以改变文件的权限
-
使用chmod搭配用户表示符和+/-=权限字符来修改权限
-
+/-=权限字符
-
+: 向权限范围增加权限代号所表示的权限
-
-:向权限范围取消权限代号所表示的权限
-
=:向权限范围赋予权限代号所表示的权限
-
用户标识符
-
u:拥有者
-
g:拥有者同组成员
-
o:其他用户
-
a:所有用户
-
用例
chmod u+w /home/abc.txt
chmod o-x /home/abc.txt
chmod a=x /home/abc.txt
-
用三位8进制数字表示
chmod 664 /home/abc.txt
chmod 640 /home/abc.txt
-
chown命令
-
功能:修改文件的拥有者
-
格式: chown[参数]用户名 文件名
chown user1 f1
chown -R user1 filegroup1
-
chgrp命令
-
功能:修改文件或目录的所属组
-
格式:chgrp [参数] 用户组名 文件名
-
常用选项:-R 递归修改文件或目录的所属组
chgrp grp1 f1
chgrp -R grp1 f1
-
umask命令
-
功能:查看或修改文件掩码
-
格式:umask 权限值
-
实例
umask 755
umask //查看
umask 044//设置
注:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
超级用户默认掩码值为0022,普通用户默认为0002。凡是在权限掩码中出现的权限最 终都要在起始权限中去掉。
去掉的方法:清零比特位
-
新建文件夹默认权限 = 0666
-
新建目录默认权限 = 0777
-
但实际上用户所创建的文件和目录,看到的权限往往不是上面这个值。为什么呢?原因是创建文件或者目录的时候还要受到umask的影响。**假设默认权限是mask,则实际创建出来的文件权限是maxk & (~umask)
-
最终权限 = 起始权限 & (~umask)
-
file指令
-
功能:识别文件类型
-
语法:file [选项] 文件或目录
-
常用选项:
-
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-
-z 尝试去解读压缩文件的内容
目录的权限
-
目录权限的分类
-
可执行权限:如果目录没有可执行权限则无法进入(cd)到目录中
-
可读权限: 如果目录没有可读权限,则无法使用ls等命令查看目录中的文件内容
-
可写权限: 如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件
-
根据上面权限的分类及其内容我们可以发现好像有一个bug——只要操作者有写权限,就能随意地删除文件和创建文件,那张三的文件被李四删除了怎么办???为了解决这个问题,Linux加了粘滞位这个东西。
-
粘滞位的添加:chmod +t(只能给目录添加)
chmod +t /home/ 加上粘滞位
ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
su - litao
rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
-
当一个目录被设置为粘滞位,则该目录下文件只能由三个角色删除(超级管理员(root)、该目录的所有者、该文件的所有者)
-
总结:目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档