目录
一、 从问题开始
问题一: 什么叫shell?
问题二: 为什么不能直接使用kernel呢?
问题三: shell 与bash 有什么不同吗?
二、 Linux权限
0x01 Linux用户
0x02 切换用户命令
0x03 sudo命令
0x04 权限的相关概念
0x05 chmod
0x06 chown
0x07 chgrp
0x08 文件权限值的8进制数值表示方法
0x09 对于目录的读写执行权限
0x10 other删除文件是否因为写权限
0x11 权限掩码
Linux严格意义上来说是一个操作系统,可以称之为"核心(kernel)",而我们一般的用户,不能直接使用这个核心,此时shell就充当一个外壳程序来与这个核心进行沟通。
从广义上来说: Linux发行版 = Linux内核 + 外壳程序
从狭义上来说: Linux = Linux 内核
而我们更多的是从广义上来说
①用户直接使用kernel的成本很高,如果某个命令执行错误,代价还是挺大的
②其次shell也可以用来对操作系统的保护,让内核不会暴露给用户,以免造成不合理的操作所以从技术角度,我们也可以把shell定义为命令行解释器,将用户的命令翻译给核心进行处理,同时将核心的处理结果翻译给使用者
shell是所有解释器的统称,而bash可以说是其中的一款解释器,就好比程序员和你之间的关系,你是程序员之一,而我们使用的Centos7.6的命令行解释器就是bash
当你每次登录的时候,那么系统就会给你创建一个对应的bash这样的进程给你进行命令行操作
Linux有俩种用户:
①超级用户: 可以不受系统限制,在Linux下做任何事情,命令提示符是"#"
②普通用户: 在Linux下做有限的事情,命令提示符是"$"
命令:su - [用户名]
功能:切换用户
小提示:
①要从root用户切换到普通用户user,则使用 su- user.要从普通用户user切换到root用户则使用 su -root(root可以省略),此时系统会提示输入root用户的口令,并且如果用su -[用户名],此时root切换到普通用户是不需要输入密码的
②但是当从root用户切换到原来的普通用户不建议使用su - [用户名],而是使用快捷方式exit或者ctrl + D,因为每切换一次用户,系统就会创建一次bash进程
③并且也需要注意的是root用户的密码和普通用户的密码最好是不同的,因为如果相同,第一点,是俩个用户密码的界限不清晰,其次也不安全
④如果从用户切换到用户当然也是需要输入密码的
命令: sudo
功能: 临时权限提升,执行后续命令,以root身份执行
提示:输入的还是普通用户的密码
此时的文件中并没有之前所创建的root.txt,因为还没有添加信任关系,这个问题留个小悬念,等学完vim的时候我们再学习,所以此时如果我们需要更高权限,可以先使用su -命令
通俗的讲,权限由文件访问者(人) 、文件类型和访问权限(事物属性)组成,比如某个视频的vip,特定的人才能观看,而对于视频文件的读写执行也需要一定的权限
文件的访问者的分类:
①所有者:文件所属的用户
②所属组:比如一个部门俩个组进行竞争,那么我们只想一个组内共享一个文件,那这个文件属于这个所属组
③其他人: 我之外的就是其他人与root 和普通用户又有什么区别呢?拥有者、所属组、其他人 指的的是一种身份角色,而root和普通用户指的是具体的一个人,拥有者、所属组、其他 人必须对应在一个具体的人身上,即对应root用户或者普通用户
文件类型:
-: 普通文件(文本,跟中动静态库,可执行程序,源程序)
d:目录文件
c:字符设备文件(键盘与显示器)b:块设备文件(磁盘,光驱等)
p:管道文件(通信)
l:链接文件(软连接)
提示:可以认为Linux下一切皆文件,Linux系统中,不以文件后缀作为区分文件类型的方式,但是像gcc,g++这些系统上的命令是要以后缀进行区分文件类型的
文件权限值的表示方法:(第2-10位,表示文件所对应的属性)
权限的前三位:文件的所有者权限
权限的中间三位:文件的所属用户组的权限
权限的后三位:其他用户的权限
r: 是否具有读权限
w:是否具有写权限
x:是否具有可执行权限
提示:rwx三者顺序不可改变
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
①用户表示符+-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
②用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
对于普通文件没有读写执行操作会怎么样?
从上图可知,对于普通文件的读写执行都是权限被拒绝
对于超级用户root会有权限约束吗?
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
也可以将拥有者和所属组同时更改
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
可以用8进制修改权限:
读权限:
写权限:
可执行权限:
如果目录本身对other具有写权限,other可以删除任何的目录下的文件
如果目录本身对other没有写权限,other不可以删除任何文件
那是否会有这样一种需求呢?
other可以在特定的目录下创建文件,并写入,但是不想让任何其他人删除自己的文件
此时运用到的就是粘滞位
格式: chmod o+t dir提示:只能对目录设置,一般是限制other权限的,对设置了粘滞位的目录,在该目录下,只能是文件的拥有者或root或者该目录的所有者可以删除,其他人不能删除
应用方向:多个人或者系统会有许多临时数据,所有的临时文件会放在系统的/tmp中,此时需要把所有的权限放开,但是指向让文件的拥有者自己删除自己的文件,此时应用到的就是粘滞位
为什么创建的文件和目录的权限都是这样的呢?
默认权限:
普通文件, 最开始的权限是666
目录文件,最开始的权限是777
从上图可知权限掩码是0002,即凡是在权限掩码中出现的,都应在最开始的权限中去掉
如: 666的二进制可以写为110 110 110,权限掩码0002的二进制是000 000 010
default = default & ~(mask) : 权限掩码去翻与最开始的权限进行按位与~(mask) : 111 111 101
最终按位与: 110 110 110
& 111 111 101
-----------------------
110 110 100即664,二进制为110 110 100
目录创建的权限也如上所示,结果为775
那如何设置权限掩码呢?
提示:设置的权限掩码只能在本次登录有效
如上是本人对于Linux权限的一些学习,如有问题,还请评论区多多指正。