前言
本文介绍了Shell的相关概念以及Linux中的基本权限。
一、Shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,即shell,来与kernel沟通。
1.Shell的定义
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给内核(kernel)处理。
- 将内核的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符或者运行起来一个应用程序)。(图形化界面)
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。(命令行)
Shell是外壳的统称。
centos 7中的Shell是bash。
Shell是包裹在系统外的一层软件层:
2.为什么用户不能直接使用kernel?
- 用户不擅长直接与操作系统打交道(要用户直接去和硬件进行交互比较困难),所以需要一个中间介质来辅助
- 用户可能会发布非法任务给系统,导致内核挂掉。为了保护内核,就需要用Shell先对任务进行分辨,再将合法的任务翻译给内核(非法的任务会被拒绝)。当然Shell为了保护自己,它执行用户的任务也是将任务分配给子进程执行,即使子进程挂掉也不会影响Shell。
二、Linux中的权限
首先Linux中存在两类用户:
root用户:超级管理员。(要注意保管好root密码)
普通用户:受权限约束的用户。
从普通用户切换为root用户:su / su -
(前者在当前路径下登录,后者重新在家目录进行登录)
【需要root密码】
退出root用户:exit/Ctrl + d
从root用户切换为普通用户:su (用户名)
【不需要密码】
如果是普通人需要使用root的命令但是不想将身份切换为root可以使用指令:sudo + (命令)
需要输入用户的密码(十到十五分钟内不需要再次输入密码)
作用是短暂提权。
sudo whoami得到的是root的身份(以root身份执行对应的命令)
要能使用sudo命令,前提是当前用户是受系统信任的命令,要被添加到/etc/sudoers。(相当于白名单用户)
给受信任的用户提供最少的障碍。
1.权限是什么?
权限:一件事情是否被谁(该角色是否被限制)做(是否有对应属性),即权限是约束两个东西,一个是人,一个是属性。
权限是约束人的(一个或某些群体)。
目标对象(电影网站,音乐app等),本身没有该对应的属性(业务),比如在音乐app看电影。
举个例子:某些视频软件,它的部分视频是需要视频会员才能进行观看的。
Linux中的角色:拥有者(owner,只能是具体的某个人)、所属组(grouper)、其他人(other)。
用户(具体的人)和角色(身份)之间是互补的不是冲突的,一个人可以有多种身份。
举例:
文件 = 内容 + 属性。
属性:
- 一个文件将用户分为三种即上面的三种角色。
- 文件后缀
windows下文件有后缀(例如.txt等),标识它的文件类型。
Linux下的文件的文件类型是与后缀无关的(即,可以给文件取任意的后缀,但是不影响文件内容),因此我们不能使用后缀来区分文件类型,即使使用后缀,也只是给用户提示文件类型(后缀也是文件名的一部分)。
注意:Linux本身不根据文件后缀对文件做区分,但是gcc等工具(在Linux中也是一个文件)它们对文件后缀是有要求的。
那么Linux中如何对文件类型做区分呢?
是根据文件属性。ls -l显示的文件各列属性中的第一行列用来区分文件类型:
- 普通文件(源文件、库文件、可执行程序、文档压缩包等) d 目录文件 c 字符设备文件(键盘、显示器) b 块设备文件(磁盘) l 链接文件(类似windows中的快捷方式) p 管道文件
- 一个文件有三种权限:读文件(r)、写文件(w)、执行文件(x)
文件的属性信息和文件的角色(角色是由具体的人扮演)对应起来(如果没有对应的权限,就是‘-’)。
2.如何操作权限呢?(怎么修改权限)
只有拥有者或者root用户可以对文件权限进行修改
1. 修改文件属性
- 直接给角色增删权限
chmod u-r (文件名)#给拥有者去掉读权限 chmod u+x (文件名) #给拥有者加上执行权限 chmod g-rwx (文件名) #将所属组所有权限去掉 chmod o+rwx (文件名) #将其他人加上所有权限 chmod u+r,g+rwx,o-wx (文件名) #多个操作一起也是可以的 chmod a-rwx (文件名)#将所有人的所有权限全部去掉
注意:拥有者与所属组的权限是不相关的,拥有者的权限只是自己角色的权限。
- 八进制方案
文件属性是用1/0表示的(1表示有该权限,0表示没有该权限)
rwx rwx rwx 111 110 000 7 6 0
这种方案叫做ugo±rwx方案,即八进制方案
因此我们修改属性也可以用指令:
chmod 660(八进制) (文件名)#修改属性
2. 修改文件角色
- 文件拥有者修改
可以将文件给别人,但是需要用root的权限强制给别人(因此也可以将文件要回来)
sudo chown (用户名) (文件名)
- 文件所属组修改
sudo chgrp (用户名) (文件名)
- 同时修改拥有者和所属组
sudo chown (用户名):(用户名) (文件名)
3.为什么要有权限
便于系统进行安全管理。
- 为什么我们创造出的文件的默认权限是我们所看到这样?
首先,LInux规定:
目录: 起始权限为777;
普通文件: 起始权限为666.
其次,系统还有系统掩码umask,凡是在umask中出现的权限都必须在起始权限中去掉!因为umask 为0002 =>000 000 010,所以我们创造出的文件的默认权限就是这样了。
去掉指的是什么?是做减法吗?
答:不是,最终权限 = 起始权限 & (~umask)。
umask:默认要去掉的权限位是1,要保留的位是0
~umask:要去掉的位是0,要保留的位是1,因此用它与起始权限按位与就可以了
注意:如果我们要进入一个目录我们需要什么权限?
答:x权限,即执行权限。
这就是为什么目录的默认起始权限位777。
三、粘滞位
1.背景
Linux系统中有很多用户,有时候会有一种特定情况需要我们在一个公共目录下进行临时文件的操作(增删查改)。
具体某个用户的目录是不能被别人访问的(没有权限),因此需要一个公共的目录,大家一起进行文件操作。
由于普通用户没有权限,因此一般这个目录是由root进行创建的。
刚这个目录的权限必须是777,以为目录的拥有者和所属组都是root,其他人是others,为了让其他人能在该目录下进行文件操作,必须将权限全部打卡。
2.具体操作
粘滞位是一种特殊的权限,由root用户进行设置,给others设置该权限。
在一个公共目录下,我们都有对目录的rwx权限,因此即使其他人的文件内容不对我开放,即我没有读取它的文件的权限,我们也是可以将它的文件删除的(这是创建文件和删除文件是目录的权限)。
为了禁止这种删除他人文件的行为,我们需要给该公共目录设置粘滞位。
chmod +t (公共目录名)#给others设置了粘滞位(将x设置为了t)
当该目录被设置了粘滞位,则该目录的文件只能被:
1.超级管理者root删除;
2.被该目录所有者root删除;
3.被该文件的所有者删除。
总结
以上就是今天要讲的内容,本文介绍了Shell的相关概念以及Linux中的基本权限的相关概念。本文作者目前也是正在学习Linux相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。
最后,如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!