目录
shell命令以及运行原理
我们先来梳理一下概念
1.大部分指令都是文件
2.用户执行某种功能的时候,不是直接在操作系统执行对应的指令,而是先交给外壳程序
- 是什么:介于用户和操作系统之间的软件 命令行解释器
- 为什么: 1.用户不善于和os之间做交互
2.shell外壳的存在,可以对请求进行合法性检查,变相的保护os
- 怎么办:bash基本都会给我们创建一个子进程,帮用户进行命令解释 bash只需要等待就行了 创建子进程,让子进程进行执行
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的简单定义:命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
- 帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的 且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。
Linux权限的概念
- 1.什么是权限?
vip,门禁,就是通过一定的条件,拦住一部份人,给另一部分人的权力,来访问某种资源 有无 或者能还是不能的问题
- 2.权限的本质?
权限和人有关
权限和事物的属性有关 权限 = 人(角色)+事物的属性
linux中的用户
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
如果我不想直接变成root,但我就是想以root的身份执行一个工作?
sudo 指令前带sudo 指令提权,我们能发现在使用的时候我们以普通用户的身份可能并不能执行sudo 一般情况普通用户不能执行sudo的
1.为什么sudo在对指令进行提权的时候,输入的是我们自己的密码?
默认云服务器不能执行 在linux服务器中支持简单的白名单的方式进行操作
2.默认普通用户目前无法执行sudo -----暂时不解决 ---后续vim再来解决这个问题
Linux权限管理
文件访问者的分类(人)
- 文件和文件目录的所有者:u---User(中国平民 法律问题)
- 文件和文件目录的所有者所在的组(所属组)的用户:g---Group(不多说)
- 其它用户:o---Others (外国人)
linux具有组的概念:主要是在多人协作的时候更好的进行权限管理
文件类型和访问权限(事物属性)
权限=用户角色(具体的人)+文件属性
33位一组;分别对应:拥有者,所属组,other
文件的属性权限
- r\4:读 ;Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- w\2:写;Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- x\1:可执行;execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- iv.“—”表示不具有该项权限
快速修改权限的做法:
一个文件的权限谁能修改?
- a.文件的拥有者
- b.root
chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
chmod 命令权限值的格式
用户表示符+/-=权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
多组修改,间隔之间加上,
# chmod u+w,g+w,o+r /home/text.txt
对比权限的有无,表现:
对于普通用户,自身要受到对应权限的约束,即使这个文件是自己的!
- root是不受权限的约束的
权限存在的的意义:
- 保证普通用户的文件的一般的安全性
我们能想到,会不会有的人拥有多重身份呢?
linux中对用户的身份识别,只会进行一次
修改权限的第二套方法:
权限=用户角色(具体的人)+文件权限属性
我们上面一直在修改的是文件的权限属性,那我们能不能修改文件的的角色呢?
- 下面我们介绍一个chown指令
本质是将文件交给另一个人,在现实中我们将东西给另一个人的时候是不是要经过另一个人的同意呢! 那在linux中这么做是不是有些过于麻烦了,所以我们强制性的塞给另一个人,在指令前加上sudo对指令进行提权
---建议直接su 把自己变成root
- chown name filename 修改拥有者
- chgro name filename 修改所属组
- chown name1:name2 同时修改
那肯定有小伙伴有疑惑为什么没有修改other的指令呢?
因为不需要,我们只需要修改拥有者和所属组 那other自然就修改了
文件权限值的表示方法
字符表示方法
8进制数值表示方法
第二种方法:chmod 八进制进行修改
linux文件类型
windows中是如何区分文件类型的??? 后缀名
linux中不通过后缀区分文件类型!【不是linux不使用后缀】通过什么区分?
ls -l 第一个属性列
linux文件类型
- d:目录文件
- -:普通文件,文本文件,可执行程序,库等都叫做普通文件
- l:链接文件 软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
b:那块设备是什么呢?
我们知道在linux中一切皆文件 所以会存在一部分 硬件的文件(“磁盘”)
c: 字符设备文件:在我们c语言中使用printf(“%d”,123),向显示器打印的时候是显示字符‘1’,‘2’,‘3’,还是123数字呢
其实是字符‘ 显示器本质就是字符设备
那再linux中又是一切皆文件,下面我们验证一下:
每次登录我们xshell的时候显示器文件在哪里呢?
/dev/pts
如果是虚拟机的话,可能会存在一个tty的目录来存放
那如果我们再来开一个登录终端的话
我们会发现多了一个以1命名的文件,因为我这里使用的是ubuntu 同学们在使用centos 的时候应该是3
在前面我们重定向的时候说过了,可以向不同的文件进行写入,那显示器也是文件,我们是不是可
以向不同的终端进行打印呢?
所以我们将以c开头的命名位字符文件
p:管道文件:进行进程间通信,在后续我们再进行了解
l:链接文件: windows中的快捷方式
这时候我们有的同学会发现,linux中不是不考虑文件后缀么,但是当我们将文件后缀改为txt时就无法执行了:
linux系统不以文件后缀作为区分:
并不带表gcc不需要!!!
linux系统!=gcc/g++
linux系统不区分文件类型,但是linux上面的工具可能区分!
那我们在linux中对于文件后缀的态度:
可以使用!
那我们如何理解x??
可执行权限 vs 可执行
能执行= 具有可执行权限+你就是一个可执行文件
目录的权限
我们能发现到现在讲的全是有关普通文件的,那目录文件呢?
1.我们进入一个目录需要什么权限? 'x'权限,我们验证一下
我们先创建一个dir的目录,依次删除它的权限试一下
我们能发现删除目录的r权限不影响我们进入目录,但是我们不能在目录里ls查看文件了
当我们删除w权限的时候我们能发现不影响我们进入,但是我们不能在里面创建文件了
我们发现当删除x权限时果然我们进不去dir目录了
目录的权限:
- 目录的r权限:用户能否查看指定目录内的信息
- 目录的w权限:决定用户是否能在指定目录内新建,修改,删除文件
- 目录的x权限: 如果目录没有可执行权限, 则无法cd到目录中
为什么?如何理解?
文件=内容+属性
目录的内容:该目录里面的所有的文件信息详细数据
当我们创建文件的时候我们能发现:
linux创建文件的时候,为什么好像有默认权限?为什么是我们默认的样子?
创建的普通文件,起始权限是:0666,去掉x的
创建的目录文件,起始权限是:0777,包含x的
但是我们看到的并不是这样,原因就是创建目录或文件的时候还要受到umask(权限掩码)的影响
umask默认值不同,是正常的!
创建文件的时候,要从起始权限中,过滤掉(不是简单的减去)在umask中出现的权限
我们能发现当我们将umask 0000
权限就回归我们的认知了,所以我们能知道权限是受umask影响的
最终权限=起始权限&(~umask)
umask linux中的权限掩码
于是, 又有新问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件(包括root), 而不论这个用户是否有这个文件的写权限? 合理么?
删除一个文件和目标文件有关系么?没关系!!!
和我所在的目录有关!!!
如果我们想在linux下,由多个用户建立一个共享文件,来被大家共同访问怎么办???
首先这个文件,不能在我们的家目录下新建 为什么?
因为我们所有人的权限默认是不放开的。
我们只能在系统的非用户目录下创建
存在别人删除文件的情况
为了解决这个不科学的问题, Linux引入了粘滞位的概念
粘滞位
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档