目录
一,关于Shell
1.1 外壳程序
1.2 shell的作用
1.3 shell运行原理
二,权限概念
2.1 用户与权限
2.2 su(用户切换指令)
编辑
2.3 提升指令权限和信任名单
三,文件权限
3.1 关于文件权限
3.2 文件访问者分类(人)
3.3 文件访问权限
3.4 文件权限值的表示方法
3.4.1 字符表示
3.4.2 进制数表示
四,文件权限设置
4.1 chmod指令
4.1.1 格式一
4.1.2 格式二
4.2 修改文件拥有者和所属组
4.5 修改文件掩码
五,粘滞位
5.1 目录权限
5.2 粘滞位
一,关于Shell
1.1 外壳程序
我们在Windows中一般都是双击某个图标来运行相关软件或者程序 ,而Linux是通过命令行的形式交互的,所以我们可以把在Linux中输入命令的方式比作成在Windows中双击图标,其本质是一样的,都是为了方便用户进行相关操作。而图形化界面和命令行界面我们称之为“外壳程序”。
问题:为什么不直接访问操作系统,而要通过一个外壳程序呢?
解答:人不善于直接访问操作系统,就像去银行办理业务一样,我们不熟悉银行的相关操作流程所以不能快速办理业务,所以银行里有很多的工作人员引导你办理业务。
而且如果让用户直接访问操作系统 --> 1,操作成本太高 2,人会犯错,会带来不安全因素
所以,操作系统的设计者不会让人直接访问操作系统
我们与Linux系统的“外壳程序”和Linux交互,这个Linux的“外壳程序”我们称之为“Shell”,Shell的最简单的定义就是“命令行解释器”。
1.2 shell的作用
①将使用者的命令翻译给OS处理 ②同时,OS也可以把命令的处理结果通过外壳程序翻译给用户
对比Windows GUI,我们操作Windows也不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作
shell对应Linux,也是相同的作用,对我们的命令进行解析,然后给Linux内核。反馈结果由内核得出结果,然后经过shell解析后给用户
注意:shell是所有外壳程序的统称,在Linux centos 7版本OS中的外壳程序叫做“bash”
1.3 shell运行原理
创建子进程,让子进程进行命令行解释,并且子进程错误时不会影响父进程
我们可以以Windows任务管理器界面来举例:
在Windows中,我们每运行一个软件,上面进程的应用列表就多一行内容。而且,我们肯定遇到过一个软件崩掉或者无响应等error的情况,或者我们手动退出导致进程关闭,都不会影响其他的软件正常跑,假如你开着微信和QQ,QQ崩了不会影响微信,微信崩了也不会影响QQ。
二,权限概念
2.1 用户与权限
Linux下有两种用户:
①root用户:只有一个,具有Linux下的最高权限,可以在Linux下做任何事情,几乎不受影响
②普通用户:可以有多个,要受权限的约束,并且只能在自己的工作目录下( /home/xxx )进行操作,而且只能在系统上做有限的工作
2.2 su(用户切换指令)
语法:su 用户名
功能:用户切换
普通用户切换成root用户
root用户切换成普通用户
普通用户切换成普通用户
如果想快速返回上次切换的用户可以Ctrl + D
2.3 提升指令权限和信任名单
一些情况下,我们普通用户想执行root级别的指令,但是切换到root用户再执行不方便,而且不安全,所以我们可以用sudo指令
语法:sudo 指令
功能:提升当前指令的权限
上面的报错是正常的,因为不可能随便让一个用户改其他用户的密码嘛
所以,我们可以把信任的用户添加到信任名单里,使被信任的用户能够使用sudo指令
vim /etc/sudoers 需要root权限
修改完成后,按住Shift+;,可以看到最底下会出现 " : ",再次输入wq!,然后回车就行(w表示保存,q表示退出,!表示强制操作)
三,文件权限
3.1 关于文件权限
问题:权限是什么?
解答:①权限是针对人的(比如普通用户看不了VIP内容) ②事务的基本属性决定权限相关的概念(比如说,石头是不会像木头一样着火的,所以不管我们再怎么烧石头它也不会着火)
所以文件权限 --> 决定一件事情是否允许被你“做”
权限核心 = 人 + 事务属性
ll命令后显示的第一列的第一个字符,表面该文件的文件类型
d:目录文件 -:普通文件 p:管道文件( mkfifo f) b:块设备(磁盘设备) c:字符设备(键盘或显示器) l:链接文件(类似Windows的快捷方式,以后会讲,有软链接和硬链接两种链接文件)
注意:Linux下不以后缀来区分文件类型的,这点和windows有很大不同,但并不代表Linux不能用文件后缀,但是Linux下的文件后缀大多数都是给用户自己看的
3.2 文件访问者分类(人)
对于操作系统来说,“人”或者用户可以分为三类:
①拥有者(owner):文件属于谁,对应上图红色框框的部分
②所属组(group):文件属于哪一个组,对应上图蓝色框框部分
③其他人(other)
在Linux中一个文件的上面三个属性由用户所扮演,而且所有用户都要隶属与某一个组,如果这个组只有你一个人,那么这个组名就和你同名,所以我们看到上面红色框框和蓝色框框内容一样
问题:所属组干嘛的,为什么要有这个?
解答:以学校小组作业为例,我们需要保证小组内成员能看到同一份资源,而且也要保证其他小组看不到我们小组的资源。
同理,Linux所属组也是为了保证某个团队的资源配置合理性,在保证能够灵活进行组内任务分工和权限配置等之外,也能保证我们组内的资源对其他人不可见,满足团队协作
3.3 文件访问权限
上面讲的是对于人的权限,表面人是否能对文件进行操作,而文件也有属于自己的属性,分别是:①可读 ②可写 ③可执行
如上图,第一个字母代表文件类型,我们已经介绍过,剩下的9个字符就代表着文件自己的属性。
这9个字符3个为一组,分别代表着拥有者,所属组和other的能对该文件进行的操作
然后,每一个红色方框内有三个字符,分别代表文件的可读,可写,可执行权限
以下面的test.txt为例:
该文件是一个普通文件,拥有者为dyk,所属组也是dyk,如果是dyk或者dyk组的组内成员对该文件进行操作时,拥有读写权限(由于txt不是可执行权限,所以第三个字母都是“ - ”),如果是other对该文件进行操作,那么只有读权限无写权限
3.4 文件权限值的表示方法
3.4.1 字符表示
ll指令打印的时候就是显示的字符表示方法
字符表示法 | 说明 |
---|---|
r-- | 只读 |
-w- | 只写 |
--x | 只可执行 |
rw- | 可读可写 |
-wx | 可写和可执行 |
r-w | 可读可执行 |
rwx | 可读可写可执行 |
--- | 无任何权限 |
3.4.2 进制数表示
字符表示方法中,每一个字符所在位置的结果只有两种,要么为真,要么为假,所以我们可以用0和1的二进制方式来表示,而刚好又是三个二进制数,所以又刚好可以用八进制数表示
权限符号 | 二进制 | 八进制 | 说明 |
---|---|---|---|
r-- | 100 | 4 | 只读 |
-w- | 010 | 2 | 只写 |
--x | 001 | 1 | 只可执行 |
rw- | 110 | 6 | 可读可写 |
r-x | 101 | 5 | 可读可执行 |
-wx | 011 | 3 | 可写可执行 |
rwx | 111 | 7 | 可读可写可执行 |
--- | 000 | 0 | 无任何权限 |
四,文件权限设置
4.1 chmod指令
语法:chmod 选项 权限 文件或目录名
功能:设置文件的访问权限
常用选项: -R 表示递归修改目录文件的权限
4.1.1 格式一
语法:u/g/o/a +/-/= 权限字符
u | 拥有者 |
g | 所属组 |
o | 其他人 |
a | 所有用户 |
+ | 向权限范围增加权限代号表示的权限 |
- | 向权限范围取消权限代号表示的权限 |
- | 向权限范围赋予权限代号表示的权限 |
4.1.2 格式二
语法:三位八进制数字 文件名
将对应的八进制数字转化为对应的三位二进制数,从而实现权限修改
4.2 修改文件拥有者和所属组
修改所属组和拥有者都需要root权限,普通用户则需要sudo进行权限提升
改变拥有者用到的指令是chown,改变所属组用到的指令是chgrp
4.5 修改文件掩码
我们新建的文件和目录都有自己默认的权限
新建普通文件的默认权限为0666,新建目录文件的默认权限为0777,第一个0代表特殊权限,这里不细讲。后面三位数是八进制数值的表示方法,如下图
除了默认权限数值之外,我们也可以自己设置创建文件时的默认权限,文件掩码就负责这块的工作。
语法:umask 权限值
功能:查看或修改文件掩码
假设权限是mask,那么实际上创建出来的文件权限是:mask&(~umask)
因此我们实际创建出来的文件和目录的权限值还需要进一步换算才能的出。首先将umaks的后三位八进制数转换为二进制数,然后按位取反,如下图:
然后我们将之前将的默认值也进行进制转换,然后与~umask进行按位与操作,最后的出来的结果就是我们创建文件和目录的最终默认权限,如下图:
总体可以简单理解为:凡是在umask中的权限位位1的位,都不能在最终权限中出现
五,粘滞位
5.1 目录权限
目录也是文件,也有可读可写可执行权限,但是目录的权限和文件稍微不同:
①可读:如果没有可读,那么无法用ls查看目录内的文件,但是可以cd进入
②可写:如果没有写,那么无法在该目录里创建和删除文件,但是可以cd和ls
③可执行:如果没有可执行,那么无法通过cd进入该目录,但是可以ls查看
场景一:一个目录dir,权限为drwxrwxr-x,拥有者和所属组都是dyk,这时候我以dyk的身份sudo touch test.txt,此时这个文件的权限为-rwr--r--,拥有者和所属组是root,这时候我是dyk,是普通用户,无法写这个文件,但是却可以rm -f删除这个文件(删除一个文件不是这个文件本身的属性说了算,而是该文件所在目录的属性说了算)
场景二:ll /,在根目录下有一个tmp文件,是公共目录,权限为drwxrxrwx,如果多个用户都在一个共同的路径下,对该目录有所有权限,那么一个用户可以对拥有者和所属组都不是自己的文件进行删除,那么就彻底乱套了
5.2 粘滞位
难题一:当多个用户共享一个目录,需要在该目录下进行读取创建和删除文件
难题二:只能删除自己的文件,不能删除别人的
为了解决上面的问题:Linux有了粘滞位的概念
语法:chmod +t 目录名
功能:给目录加上粘滞位
当一个目录有粘滞位时,该目录下的文件只能由这些用户删除:①超级用户 ②该目录的拥有者 ③该文件的拥有者
但是目录加上粘滞位后,如果用户有该目录的写权限,不影响他在该目录下创建文件