今天我带来Linux重点知识:shell命令以及运行原理、Linux权限、粘滞位的知识点。
目录
- shell命令以及运行原理
- Linux权限的概念
- Linux下的用户
- su命令
- Linux权限管理
- 文件访问者的分类
- 文件的类型和访问权限
- 文件权限值的表达方法
- Linux关于权限的知识点补充
- 1.Linux创建用户
- 2.sudo指令
- 文件访问权限的相关设置方法
- 1.chmod指令
- 2.chown指令
- 3.chgrp指令
- 4.umask指令
- 5.file指令
- 6.使用 sudo分配权限
- 粘滞位
- 权限的总结
shell命令以及运行原理
Linux严格意义上说得是一个操作系统,我们称之为"核心(Kernel)",但一般用户,不能直接使用Kernel。而是通过Kernel的"外壳"程序,也就是所谓的shell,来与Kernel沟通。
从技术的角度,shell的最简单定义:命令行解释器 主要包含:
将使用者的命令翻译给核心(Kernel)处理
同时,将核心的处理结果翻译给使用者
对比 Windows GUI,我们的操作Windows也不是直接操作Windows内核,而是通过图片接口,点击,从而完成我们的操作。
shell对于Linux,有相同的作用,主要是对我们的指令进行解析,然后将指令给到Linux内核。在通过内核运行出结果后,通过shell解析给用户。
下面是一个简单的示意图
shell存在的意义:
a.进行命令行的传递和返回结果
b.保护操作系统(遇到具有破坏操作系统的指令进行拦截)
c.执行命令的时候,创建子进程来进行执行(如bash就是centos 7下使用的一种shell,bash是一个进程,执行命令的时候,bash创建子进程,由子进程来执行命令)
Linux权限的概念
Linux下的用户
Linux下有两种用户:超级用户(root)、普通用户
超级用户:可以在Linux系统下做任何事情,不受限制(牢记一句话,权限只是对于普通用户而言)
普通用户:在Linux下做有限的事情
那么我们怎么快速分别现在是超级用户还是普通用户呢?可以通过指令输入提示行的最后一个字符来分辨。
超级用户命令提示符为"#"
普通用户命令提示符为"$"
即然懂得了超级用户和普通用户,我们就要学会如何在两种用户之间来回切换。这就要用的一个新的指令:su指令
su命令
语法:su 用户名
例如:要从root用户切换到普通用户的话,则使用su 普通用户(如,我的Linux机器里面有一个普通用户zrb,我要将root用户切换为普通用户,则使用su zrb)
要从普通用户切换到root用户,则使用su root(root可以省略),此时系统会提示输入root用户的密码
下面是su指令的三个细节:
只使用su切换用户的时候,所处的目录位置没有发生变化。
使用su - ,即为重新登录,那么将处于家目录下。(su - 是切换为超级用户)
超级用户可以任意切换其他普通用户,不需要密码,还是那句话,权限是对于普通用户而言的。
Linux权限管理
文件访问者的分类
文件和文件目录所在者:U - User
文件和文件目录所在者 所在组的用户:G - Group
其他用户:O - Others
Other由不是文件的拥有者和文件的所属者来判断。
文件的类型和访问权限
在前面的指令讲解中,我已经说过了ls指令可以查看某个目录下的目录和文件,那么现在我对查询的结果进行分析。
如上,在上次的讲解中,我只是提到了后面的颜色去分别目录和文件等其他信息,方框里并没有讲解到。
在讲解之前,我们需要先了解几个概念。
1.文件类型(每一种文件类型由一个字母代替),Linux操作系统下,不用文件后缀区分文件类型,而是使用文件属性中第一列的第一个字符来区分文件类型。
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
2.基本权限(三大基本权限:读、写、执行)
读(r):Read对文件而言,具有读取文件内容的权限;对目录而言,具有浏览目录信息的权限
写(w):Write对文件而言,具有修改文件内容的权限;对目录而言,具有删除、移动目录里文件的权限。
执行(x):execute对于文件而言,具有执行文件的权限,对目录而言,具有进入目录的权限。
有无权限有什么区别
注意:root作为other,即使other对于某个文件没有权限,root依然可以做读、写、执行等操作。
接下来,我来正式讲解方框里的内容
如上面的图片,文件名(目录名)为ctrlProcess
1.第一个字符是d,表示文件类型是文件夹,也就是目录
2.后面三个为一组,第一组表示拥有者的权限;第二种表示所属者的权限;第三组表示other权限,至于表示的是什么意思,后面再来讲解。
3.数字2表达的意思涉及到其他内容,以后再来
4.其他内容依次排过去,分别表示的意思是文件拥有者、文件所属组、字节大小、创建或者修改的时间、文件名等内容。
注意的是:Linux操作系统不看文件后缀,在创建文件时,我们也可以加入后缀便于自己区分文件类型,当像gcc(Linux下的c语言编辑器)还是看后缀的。
文件权限值的表达方法
字符表示方法
Linux表示 | 说明 | Linux表示 | 说明 |
---|---|---|---|
r- - | 仅读 | -w- | 仅写 |
- -x | 仅执行 | rw- | 可读可写 |
r-x | 可读可执行 | -wx | 可写可执行 |
rwx | 可读可写可执行 | - - - | 无权限 |
8进制数值表示方法
权限符号 | 八进制 | 二进制 |
---|---|---|
r- - | 4 | 100 |
-w- | 2 | 010 |
- -x | 1 | 001 |
rw- | 6 | 110 |
r-x | 5 | 101 |
-wx | 3 | 011 |
rwx | 7 | 111 |
- - - | 0 | 000 |
所以,在上面图片中,拥有者和所属组的权限是可读可写可执行;other的权限是可执行。
Linux关于权限的知识点补充
1.Linux创建用户
Linux有一个root用户,我们可以通过指令创建许多的普通用户,具体指令操作如下:
cd /home //先加入家目录
adduser zhangsan //添加普通用户,名字为zhangsan
passwd zhangsan //设置密码,注意再来的密码不会回显,也就是输入不会显示出来
接下来,我们就可以使用指令登录,如下:
ssh zhangsan@(云服务器公网地址)
则可以登录张三的普通用户了。
那么怎么删除用户呢?指令如下:
userdel 用户名
如果要将该用户留在系统上的文件也删除掉的话,可以使用指令
userdel -r 用户名
注意:当我们要创建用户时,普通用户是没有权限去创建新用户的,这是我们只有切换为root用户,或者sudo提权才可以,
这里我切换为root用户,演示一遍
2.sudo指令
在Linux的使用中,权限的影子无处不在,如:在上面ctrlProcess目录中,lisi用户属于other,只有执行的权限,没有写和读的权限,那么我们要查看ctrlProcess目录,其中一种方法就是切换为root用户。
在大部分情况下,切换到root用户可以解决,但是当我们要在普通用户中更新某一个工具时,难道要切换成root用户?切换到root用户去下载,不就下载到了root用户吗,我只要更新普通用户的工具应该怎么做呢?
这时,我们就可以用到sudo指令了。
sudo 命令行
可以让该条命令执行过程中具有超级用户的权限,输入的密码是当前普通用户的密码。当输入该指令后,下次执行该功能加sudo不用输入密码,一般持续10分钟。
演示如下:
解决普通用户无法sudo的情况,原因是未被加到可信任的名单
方法如下:
以root进行登录
vim /etc/sudoers
找到 (Allow root to run any commands annywhere),粘贴这一行,将新一行改为普通用户。
跟我的普通用户zrb那样操作即可。
注意的是,在sudo提权指令中,sudo指令输入的是普通用户的密码;su指令输入的是超级用户的密码。
文件访问权限的相关设置方法
1.chmod指令
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod ① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
②三位8进制数字
在上面rwx的权限讲解中,就有对权限采用八进制表示的,这里我们也可以采用八进制来进行赋予权限。
2.chown指令
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
常用选项:
-R : 处理指定目录以及其子目录下的所有文件
使用chown指令一次性修改文件拥有者和所属组
3.chgrp指令
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
4.umask指令
功能:查看或修改文件掩码
起始权限:系统设定的。
普通文件起始权限:666(rw- rw- rw-)
目录的起始权限:777(rwx rwx rwx)最终权限:起始权限换算而来
系统为了更好的控制文件权限,系统会有默认的权限掩码的概念!
umask指令可以查权限掩码
格式:umask 权限值 (设置新的权限掩码)
如:umask 777
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
超级用户默认掩码值为0022,普通用户默认为0002。
最终权限 = 起始权限 & (~umask)
权限掩码的规则就是在起始权限中,去掉在umask中出现的权限,不能影响其他任何权限。也就是在权限掩码中出现的权限,就不能在最终权限中出现。
下面是求普通文件和目录的最终权限的过程:
5.file指令
功能说明:辨识文件类型。
语法:file [选项] 文件或目录…
常用选项:
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件
6.使用 sudo分配权限
(1). 修改/etc/sudoers 文件
chmod 740 /etc/sudoers
vi /etc/sudoers
第一条指令剥夺去了other的权限,保证了安全性,只有root用户(该文件的拥有者和所属组都是root)才可以修改/etc/sudoers的内容。
第二条指令中的vi和vim都可以打开文件,相当于打开/etc/sudoers文件去修改信任内容
格式:接收权限的用户登录的主机 = (执行命令的用户)命令
(2). 使用sudo调用授权的命令
命令:sudo
常用选项:-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
格式:sudo -u 用户名 命令
实例:sudo -u root /usr/sbin/useradd u2
使用root身份去创建新用户u2。
粘滞位
背景:在使用Linux的时候,未来可能有一些共享目录,被所有的普通用户共享,用来保存普通用户产生的临时数据。共享目录通常是root提供的。
粘滞位是一个比较难以理解的内容,如果没有讲解对应的使用环境,单单只是概念的引出,那是十分难以理解的,现在我先来模拟一个场景。
由于是共享目录,那么不管是该共享目录的拥有者、所属组、other都要有rwx权限,即分别要保证可以在该共享目录中
读(r):进行浏览目录信息
写(w):具有删除、移动目录里文件
执行(x):具有进入目录的权限。
注意root1对应other的权限只有读。
这里有一个问题:为什么zrb作为root1文件的other,只有读的权限,为什么还是可以删除root1呢?
这里需要注意的是,某个用户只要具有对某个目录的写权限,那么就可以对目录里的任何文件进行删除和移动。
在前面设定下,就是要创建一个共享目录,所以该目录对于所有用户都有写(r)的权限,那么就导致了某个用户在该目录下可以删除其他用户的文件。
总结:普通用户能否在某个目录下,删除其他用户的文件,只要看是否具有该目录的写权限即可,不需要看有没有对于该要被删除的文件有没有什么权限。
那么,如何解决呢?关闭该目录对所有用户的写(r)权限,那么不就违背了共享目录,哪个用户都可以在里面创建自己的文件,删除自己的文件吗。
此时就出现了粘滞位的概念,粘滞位的作用:让大家在使用共享目录的情况下,不能随便删除其他人的文件。
注意:粘滞位只能给目录添加。
指令:
chmod +t 目录名 //给目录加上粘滞位
chmod -t 目录名 //给目录删除粘滞位
当一个用户被设置成"粘滞位",则该目录下的文件只能由
1.超级管理者删除
2.该目录的所有者删除
3.该文件的所有者删除
权限的总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限即使可以执行ls命令,但仍然没有权限读出目录下的文档。