shell命令以及运行原理
Windows以图形化界面为主要交互方式,简单高效,易于日常使用。Linux以命令行界面为主要交互方式,操作相较windows,mac来说比较困难一些,但linux也有向着图形化界面努力的桌面系统,例如ubuntu。Windows和Linux的交互方式虽然不同,但其本质上却是一样,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面就是我们所说的 " 外壳程序 "。
Linux严格意义上来说是一个操作系统,我们称之为 "核心 (kernel) ",但我们一般用户不能直接使用kernel,而是通过kernel的 “外壳程序”,也就是所谓的Shell,来与 kernel 沟通。
Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
1.将使用者的命令翻译给核心(kernel)处理。
2.同时,将核心的处理结果翻译给使用者
shell运行原理:
1.创建子进程,让子进程进行命令行解释
2.子进程出现任何问题,都不影响父进程Shell
总的来讲:
1.shell是什么?
是一个包裹在操作系统外部的一层软件层,帮用户进行命令行解释
2.为什么要有shell?
因为用户不善于和内核打交道,所以需要在用户和内核之间添加一层软件层方便用户进行指令或者图形化界面的一个输入,
然后把指令翻译给操作系统,再把结果翻译给用户
3.shell具体是怎么做的?
shell父进程+子进程
Linux权限
Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$‘“
su 命令
可能有时你的权限不够,需要从普通用户切换到超级用户,进而完成某些操作。
语法: su 用户名
功能: 用户切换。eg:从普通账号切换为root账号。
注意:
1.从普通账号切换为root账号时,指令当中的root可省略,因为root账号只有一个。
2.该指令也可以从一个普通用户切换为另一个普通用户,输入要切换用户的密码即可。
3.切换用户后,若想切回上次的用户,可通过Ctrl+D实现。
sudo 命令
但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。
语法: sudo 指令
功能: 提升当前指令的权限。
Linux权限管理
文件访问者的分类(人)
对于用户来说,权限可以将用户分为三大类:
1.文件和文件目录的所有者(文件拥有者User)。
2.文件拥有者所在的组的用户(文件所属组Group)。
3.其他用户(Others)。
注意:
1.用户–>角色对应的关系
2.所属组什么意思?
特殊情况:一个组内可以只有一个人,
一个组内可以有很多人,用组长的名字来对应组的命名
注: 除了文件拥有者和文件所属组之外的都叫other。
文件类型和访问权限(事物属性)
我们通常通过ll来查看文件:
a) 文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
注意: 在Linux当中,文件类型与文件后缀无关。
b)基本权限:
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
表示方式:
1.字符表示方法
2.八进制数值表示法
文件访问权限的相关设置方法
chmod命令
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项: -R 递归修改目录文件的权限。
说明:只有文件的拥有者和root才可以改变文件的权限
chmod指令权限值的格式:
格式一: 用户符号 +/-/= 权限字符
1)+:向权限范围增加权限代号所表示的权限。
2)-:向权限范围取消权限代号所表示的权限。
3)=:向权限范围赋予权限代号所表示的权限。
用户符号:
1)u:拥有者。
2)g:所属组。
3)o:other。
4)a:所有用户。
格式二: 三位八进制数字
将对应的八进制数转换为二进制,进而设置对应权限值。
chown命令
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
常用选项: -R 递归修改目录文件的拥有者。
注意: 修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。
chgrp命令
语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。
注意: 修改文件的所属组也需要进行权限提升。
umask命令
功能:
查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到
umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用
户默认为0002。
实际创建的出来的文件权限是: mask & ~umask:
注意: 超级用户的默认掩码为0022,普通用户的默认掩码为0002。
目录的权限
1.可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
2.可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
3.可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
我们来看下面这种问题:
为了解决这个不合理的问题,Linux引入了粘滞位的概念。
粘滞位
语法: chmod +t 目录名
功能: 给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。
此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
1.超级用户删除。
2.该目录的拥有者删除。
3.该文件的拥有者删除。
注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件
关于权限的总结
1.目录的可执行权限是表示你可否在目录下执行命令。
2.如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录,即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
3.而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。