1 shell命令以及运行原理
1.1 shell命令行的概念
大家在以前的学习中可能会有一个固态的印象:
一台计算机的大概分层为下图
也就是说人可以直接调用计算机的操作系统,但真的是这样吗?
答案是否定的!
其实操作系统还有一个“外壳”:
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
我们举一个例子:
其实用户就是一个大龄未婚的小伙子,他现在看上了一个如花似玉的姑娘(也就是操作系统),想找他做老婆(用户的需求),但是不好意思去找姑娘,于是就到村里找了个王阿姨(shell)去说媒,这就很好理解了吧
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
1 将使用者的命令翻译给核心(kernel)处理
2 同时,将核心的处理结果翻译给使用者
window系统中的图形界面就是一个shell程序,我们点击图标从而完成相应的需求,但是Linux中,shell主要是对指令进行解析,然后交给kernal,反馈的结果通过kernal运行出结果,通过shell解析给用户
1.2 shell外壳程序的意义
那么问题来了,为什么不直接让用户使用我们的操作系统呢?这样不是更方便吗?
这是因为如果让用户直接访问操作系统,它的成本是很高的,并且犯错率也很高,容易出现很多差错,还不如让shell在中间进行传递,降低成本的同时提高系统的准确率
1 是用户和操作系统交互中间的软件层
2 一定程度上可以保护操作系统
2 Linux权限
2.1 Linux权限的概念
Linux下有两种用户:
超级用户(root)、普通用户
这也从侧面反映了Linux操作系统是多用户操作系统,windows也是
从名字上就能看出来哪个用户的权限大,root在Linux系统中只能用无所不能来形容,就这么说吧,root就像是一个古代的皇帝,其他普通用户就是各个地方的亲王,每年都要上贡,但是在自己管辖的区域有一定的权力
我们可以用指令su来切换用户:
但是需要密码
su 【用户名】
例如:
指令exit可以用来切换到上一次所使用的用户:
2.2 Linux权限管理
2.2.1 文件访问者的分类(人)
文件的访问者一共可以分为三种:
文件和文件目录的拥有者:u---User 文件和文件目录的所有者所在的组的用户(所属组):g---Group 其它用户:o---Others
例如:
下图中的文件的拥有者和所属组都是root
而其他用户就是说操作系统内其他的普通用户
2.2.2 文件权限值的表示方法
r代表可读,w代表可写,x代表可执行
读r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 写w:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 执行x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 “—”表示不具有该项权限
文件的权限是用来限制访问的,权限值可以分为两种方法:
字符表示法:
八进制表示法:
2.2.3 文件类型和访问权限(事物属性)
其实每个文件访问者对于各个文件其实都有一定的访问权限
我们先来了解一下文件类型:
d:文件夹 -:普通文件 l:软链接(类似Windows的快捷方式) b:块设备文件(例如硬盘、光驱等) p:管道文件 c:字符设备文件(例如屏幕等串口设备) s:套接口文件
为了大家更好地理解上图,请看具体的例子:
2.2.4 文件访问权限的相关设置方法
chmod
功能: 设置文件的访问权限
格式: chmod [用户] +/- 权限 文件名
这里大家要注意一个点:
只有文件的拥有者和root才可以改变文件的权限!
各个字符表示的意思如下:
+:向权限范围增加权限代号所表示的权限 -:向权限范围取消权限代号所表示的权限 =:向权限范围赋予权限代号所表示的权限 用户符号: u:拥有者 g:拥有者同组用 o:其它用户 a:所有用户
例如:
下图中的文件:
我需要给mytest2改权限:
chmod u+x mytest2 给拥有者加上可执行权限 chmod g+x mytest2 给mytest2文件所属组用户加上可执行权限 chmod o+x mytest2 给其他用户加上可执行权限 chmod a+x mytest2 给所有用户加上可执行权限
此外还有一种八进制的方式:
例如:
chmod 664 mytest2 chmod 640 mytest2
chown
功能: 修改文件的拥有者
格式: chown [参数] 用户名 文件名
例如:
chown root mytest2 将mytest2的拥有者改为root
可以看到,改变拥有者后jh变成了 root
chgrp
功能: 修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
例如:
chgrp root mytest2 将mytest2的所属组改为root
但是大家有没有发现:
chown和chgrp我在这两个指令之前加入了一个sudo,这是为什么呢?
实际上也可以切换为root来执行这个指令,但是为了方便,我将jh这个普通用户放入了我的信任列表里,至于怎么放,稍后解答!
umask
功能:
查看或修改文件掩码
新建文件默认权限=0666
新建目录默认权限=0777
前面的0不用管,默认第一位都是0,文件夹666就是都没有执行权限,目录777就是三个所有权限都有,我们来验证一下啊:
我们新建了一个文件夹3_20,一个文件3_20_test,这么他们的访问权限和我们默认生成制定的规则不一样呢?
**原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: **
mask & ~umask
umask我们可以叫它权限掩码
那么我们可以查看我们当前系统的umask,也可以设置:
umask 查看系统的权限掩码值
umask 0003 修改权限掩码值
2.3 file指令
功能说明: 辨识文件类型。
语法: file [选项] 文件或目录…
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。 -z 尝试去解读压缩文件的内容。
例如:
file 3_20
使用 sudo分配权限
想使用sudo指令,我们首先要将当前的用户加入信任列表:
我们需要用vim指令打开一个文件进行修改:
vim /etc/sudoers
至于如何修改,我们下篇博文在做讲解,因为本篇博文还有未涉及到的知识
然后我们就可以调用sudo分配权限了
2.4 目录的权限
在目录中各种权限的解释如下:
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
那么我们就有一个问题出现了:
我们有一个需要注意的点:
一个文件是否能被删除取决于这个文件所在的目录
那么也就是说,只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限,但是这明显有问题啊
我创建的文件,这么情敌还能删除掉我的文件呢?
为了解决这个问题:
就引出了粘滞位!
2.5 粘滞位
当一个目录被设置为**“粘滞位”(用chmod +t)**,则该目录下的文件只能由:
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
例如:
chmod o+t yw_test
可以看到other用户的可执行权限变成了t,不能删除它
此外,粘滞位大家要注意啊:
1 粘滞位只能给目录设置,文件不能
2 粘滞位设置后一般不能被取消
2.6 权限的总结
1 目录的可执行权限是表示你可否在目录下执行命令。
2 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录有-r 读权限(这
个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
3 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读
权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档
好了,今天的分享到这里就结束了,感谢大家的支持!