目录:
- 前言
- 一、shell
- 二、权限
- (一)文件权限
- (二)权限相关指令
- chmod(修改权限)
- su 、sudo(提权)
- root提权
- chown 、chgrp
- umask(掩码)
- file
- (三)目录权限
- 三、粘滞位
- 总结
前言
打怪升级:第21天 |
---|
一、shell
shell是外壳的意思,它是Linux内核的外壳,是用户和内核(kernel)进行交流的桥梁,
在Windows中我们使用鼠标双击软件图标可以打开软件,在Linux中我们也可以通过输入指令来完成一样的操作,
而不管是鼠标双击、还是输入指令我们都没有直接与内核进行交流,而是通过shell这个“中介”进行的:
Shell的最简单定义:命令行解释器(command Interpreter),在我们输入指令时,shell会接收指令并检测指令是否有误, 如果有误,就会在半路上被打回来,内核都不知道有这条指令这回事儿,
而如果指令正确,shell就会将指令做进一步的转换,变成Linux内核能够识别的指令后传达给内核,再将内核的反馈传达给用户。
注意:shell是外壳程序的统称,上面所述的图形化界面和Linux中的bash都是shell的一种。
这里举一个示例:
下方两者等价:
1.Windows图形化界面
2.Linux的shell外壳
由于直接和内核进行交流并不容易也无必要,因此就有了shell的存在,大大简化了使用电脑的成本,
如果有朋友对shell有兴趣,可以参看下面这篇文章:什么是shell?
二、权限
权限 = 人 + 事物属性。
在Linux中人分两种:超级用户(root) 和 普通用户。
其中root只有一个,他是Linux中的超级用户,在Linux中可以做几乎任何事情,可以不受权限的约束;
但是普通用户则不然,普通用户可以有多个,作为普通用户,在Linux中只可以做在自己权限范围内的事情;
这里就可理解为视频软件中的vip和普通用户;
超级用户的命令提示符是"#“,普通用户的命令提示符是”$"。
人如果按团体分:拥有者,所属组,其他人,下方会进行介绍。
想要对文件进行相应的操作,不仅要看自己是否具有权限,同时也要确定该文件也具有相应的属性。
举个栗子:在视频软件中,有的视频免费,有的则限定只有vip可看,那么普通人只要充了vip就具有了观看该视频的权限;
而哪怕现在已经是vip了,他也不能够在视频软件中敲代码,因为视频软件本身就不具备这样的功能(这波属于公鸡下蛋)。
(一)文件权限
下方示例演示文件的r、w、x权限的作用:
注意:在上方图片中,我们说Linux内核区分文件的依据是文件属性中第一个字符,其中 ’ - ’ 代表文件,
那么是否文件后缀在Linux中就是没有意义的呢?
下面我们通过gcc来验证一下:
gcc为C语言编译器,能够编译链接c语言文件,并生成可执行文件。
我们可以看到,同一个文件,只有当文件后缀名为 ’ .c '时gcc才可以通过编译,
所以,虽然内核不看文件后缀名,但是在使用一些小工具时是需要通过后缀名来判断该文件是否可以处理的;
这点上Linux就和Windows有所区别,所以,你懂的。(Windows图形化界面通过文件后缀判断文件类型)
而且使用后缀名还有一个特点就是:方便我们自己看,方便我们通过后缀名来判断文件类型。
文件中的拥有者、所属组和other我们可以如此理解:
在学校练习做项目时,老师分配4人一小组合作完成一个项目,
那么此时各个项目的拥有者为:老师;
所属组为:分到一组的4名同学;
other为:这4名同学之外的所以人。
(二)权限相关指令
chmod(修改权限)
语法:chmod u/g/o/a +/-/= 权限
功能:给用户增加或取消对应权限;
介绍:用户: u :拥有者 。 g:所属组 。 o:其他人 。 a:所有人。
操作: +: 增加权限 。 -:取消权限 。 =:赋予权限。
权限: r:读权限 。 w:写权限 。 x:执行权限。
权限既可以使用指令操作,也可以使用八进制数据操作。
> 只有文件的拥有者和root可以修改文件权限。
su 、sudo(提权)
语法: su + 用户名(默认为root)
功能:输入用户(root)密码后,仅仅切换用户身份语法:su -
功能:输入root用户密码后,重新登录root账号语法:sudo (需要操作提权)
功能:以其他身份来执行
root提权
root用户给普通用户提权操作:
补充
root添加和删除用户:
chown 、chgrp
语法:chown u1 file
功能:将file文件的拥有者改为u1,换句话说就是把文件给u1
语法:chgrp g1 file
功能:将file文件的所属组改为g1。
那么问题来了:当我们要把一个东西给其他人时需不需要经过他人的同意呢?
比如有人想要送给我们一口大大的黑锅,需不需要经过我们的同意? 答案肯定是需要的。
但是root用户就不同了,“你不要?拿着吧你~。”
所以root可以将文件强制给其他人,而普通用户也可以使用sudo提权,借用root的名义把文件强制交给其他人。
umask(掩码)
语法1:umask
功能:查看掩码
语法2:umask 权限值
功能:修改掩码
file
语法:file 选项 file/dir
功能:辨识文件类型。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。
(三)目录权限
三、粘滞位
在实际开发中我们会遇到合作开发的情况,大家都在一个工作目录dir下进行操作,
将所有人都分到一个小组中,那么dir的所属组就需要具备所有权限(r:查看目录中文件信息,w:创建、删除文件,x:进入目录);
而由于大家对这个目录都具有足够的权限,那就可能会有成员A误删成员B的文件的情况出现;
此时有同学会说:那就取消掉目录的 w 权限可以吗?
首先,这么做是可以解决删除文件的问题,但是这样也同时“解决了”创建文件的问题,那么以后有成员需要增加新的东西时则只能去找来
root大哥来帮忙了;
其次,当项目需要更新,以前的数据需要删除时,大家也同样无能为力,只能请求root。那么为了解决这个问题(什么问题,当然就是有人误删其他人文件的问题喽~。),我们引入了粘滞位的概念;
语法:chmod +t dir
功能:设置粘滞位后,除了文件拥有者和root,其他人无法删除文件。
总结
- root就是Linux中的一把手,基本上做任何事儿都不需要与人打招呼,想干嘛就干嘛,权限也约束不住它。
- 使用sudo提权时需要输入的是自己的密码而不是root的,这并不表示任何人普通用户使用sudo后都可以“变成”root,因为在使用sudo之前你需要先被root加入“信任列表”。
- 文件的权限和目录的权限注意区分。
- 只能给目录设置粘滞位,因为创建和删除文件的权限是由目录的 w 权限决定的,但是设置了粘滞位后,表现则是:最后一个位置为T。