写在前面
可以说,我们基本指令的那部分内容已经完了,下面需要开始我们新的篇章,权限.权限可能就这一篇博客,内容倒不多,关键是要我们理解,理解是很重要的,下面让我们来开式正式的内容吧.
shell命令以及运行原理
严格来说,linux是一个一个操作系统,我们称之为“核心(kernel)",但是我们一般不直接操着这个核心,而是通过一个外壳,也就shell,这是一个种类,包括我们现在使用的额XShell,那么我们在想,为什么我们不可以直接操作这个kernel呢?使用shell有什么好处呢?着都是需要我们考虑的.
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理
同时,将核心的处理结果翻译给使用者
这个大家看到可能感到有点抽象,不用担心,这里我用一个例子和大家解释.
这里有一个程序员叫做张三,一天他感到有点孤独,想结婚了,张三有一个心上人,就是隔壁的如花.张三一直喜欢这个如花,但是那张三有点社恐,害羞的不敢表达出来.恰巧他们村里有一个媒婆,王婆.这一天张三告诉王婆:"王婆大娘,我这想结婚了,喜欢我隔壁的如花,想让你帮忙说说,到时候喜酒一定不会少的".王婆一听,来生意了,随即去找了这个如花.告诉如花:"如花啊,这有一门婚事想和你说说,你知道张三不,这个有工作了,人品还是不错的的,他托我想找一门婚事,从小就喜欢你了,你觉得他怎么样".如花心里想,张三是哪个?想了一会,才知道就是那个小时候跟在我屁股后面的那个,他是一个好人,而且我也有男朋友了.如花婉拒了,告诉王婆,我有男朋友了.王婆一听就知道这事成不了,回去告诉张三.但是过几天张三还是放不下,又找王婆,还是想找如花.王婆一听,就说我们立马再去一趟.王婆出门转了一圈,连如花都没出找,回去说,张三如花她有男朋友了,我再给你说一门吧,长得很是水灵.
这个故事就可以告诉我们shell的作用.
可以这么说张三就是我们这个普通用户,如花就是Linux核心,而王婆就是shell.
但张三请王婆说媒事,就是向核心发送请求,如花想了想张三是谁,就是解析指令,说不同意就是拒绝请求.张三不死心,再一次请求,王婆知道这事没戏,直接自己拒绝了请求.
Linux用户的分类
在用户上会被分为两类用户,windows环境下也是一样的.
普通用户 多个 权限受限制
root 只有一个 用于最高权限
这里就不谈如何创建普通用户了,在这个系列最开始就分享了过了.
whoami 指令
这个指令是查看但当前用户.
[bit@Qkj ~]$ whoami
如何进入root用户
我们在普通用户这里,可以直接使用指令和root密码来进入root用户.
[bit@Qkj ~]$ su -
输入root密码,记住root密码最好不要和普通用户的密码一样.
如何退出root用户
直接使用热键ctrl+d
su 指令
我们这里一个su指令,这个可以切换我们的用户,上面我们也看到了切换到root用户,这里的**-**就是超级用户的代表,要是我们从一个普通用户切换到另一个普通用户该怎么做.
直接su+用户名,你会发现,他要你输入密码,输入你想进的用户密码就可以了
[bit@Qkj ~]$ su qkj
这里就有一个问题了,要是你不知道这个用户密码该怎么办,这里还有一招,我们可以先进root,在直接切换,不用密码.
[bit@Qkj ~]$ su -
文件
大家先看一下这张图片,后面我们几乎所有的知识都是围绕这个图片来展开的,可以说重中之重.
文件是什么
在Linux中,文件包含两个部分的内容,一个事文件属性,另一个事文件内容.这里文件内容就不用说了,谈谈属性.
所谓的属性可以理解为文件的一些信息,在这张图上体现为下面.
我们需要理解一下这个些东西
文件类型
开门见山,这里我们提供几个文件的类型,有的可以不用记,后面用到的时候就会知道了.
- 普通文件, 文本 , 源代码, 可执行程序,第三方动态库
d 目录文件
l 链接文件
p 管道文件
b 块设备文件,磁盘
c 字符设备文件
上面看到了什么文件类型,我们不由得疑惑,一个-也可以作为一个文件类型,这事怎么回事,这里要和大家说一个理念,**在Linux中,我们不以文件的后缀来区分文件的类型.**这个理念十分的重要.我们来证实一下.
我们把可执行程序修改一下文件的后缀发现人就可以执行,这是就可以证实了.
那么这里我们就开始疑惑了,既然Linux环境下不区分后缀,我们事不是可以使用gcc编译.txt文件,我们试一试后发现,这是不允许的,这就让我们感到疑惑了.实际上,是可以理解的,Linux不区分,但是gcc这个编译器是会区分的,你不能那前朝的剑斩本朝的官吧.
权限
我们前面看到文件的权限,那么请问这个都是什么玩意,我这一点都看不懂,不要着急,我们会一一解释的.
什么是权限
我们需要先认识一下究竟什么是权限.这是一切的基础.
我们都知道,在学校里面考试,学生只有考试的资格,他绝对没有资格去修改自己的成绩,否则就乱套了,-这就是权限的作用.我们还知道在QQ中,有禁言的功能,但是一个普通群成员是不能禁言的,这是权限的魅力.我们来看看吧.
权限本质上是约束一个人可以做什么,不可以做什么.这里我还要提一个场景,权限的存在还需要环境,你想去一个博客网站去看电视剧,这可能吗?所以说权限存在下面的要求.
约束人的
权限对应事物需要有相应的属性
所谓的权限就是 人 + 属性
我们Linux上学的是对文件的权限,我们按照上面来套套.
文件谁能"访问",谁不能访问?文件应该具有某种属性,比如说可读(r),可写(w),可执行(x)...属性.
Linux下人的分类
既然权限包含了人,那么Linux系统下有哪些人呢?Linux下人分三类.
文件所有者 owner
文件的所属组 grouper
文件的其他用户 other
我们需要理解一下这个分类,我们可以接受一个文件不属于自己肯定属于其他人,那这个文件的所属组是怎么理解的?实际上我们可以这么理解,你写的程序很大,独自一个人是不可能完成的,这时候你会和其他人组队,那么你会把自己的写的文件放给其他的队员来观看,这就是文件的所属组,这样可以好理解一点.
权限格式
我们既然知道了Linux下人的分类,下面的图片就有可以谈的了.
这样你就可以发现文件权限的格式,这里我们把前面9个字符三三分组,而且每一组的每一个位置都是确定的
第一组 代表owner 权限
第二组 代表grouper权限
第三组 代表other权限
后面跟着的一次式文件所有者和文件所属组,我们可以想到,如果人不属于这两种,那么一定就是other,这里没有什么好说的.
权限属性
文件的权限属性有四个,但是这里我和大家谈三种
r 可读 只能在第一个,否则就是 - 不可读
w 可写 只能在第二个 ,否则就是 - 不可写
x 可执行 只能在第三个,否则就是 - 不可执行
我们先来谈谈这个图片的认识.
owner 是 bit 权限是 rw- 也就是 可读(r),可写(w),不可执行(-)
grouper 是 bit 权限是 rw- 也就是 可读(r),可写(w),不可执行(-)
other 是 非bit,权限是 r-- 也就是 可读(r),不可写(-),不可执行(-)
修改文件权限
修改文件的权限总体来说分为两类,可以这么说,我们可以修改所有者的权限和修改所有者.我么一次来说.
修改文件权限
我们可以使用chmod指令来修改所有者的权限.
我们可以知道,用u代表owner,g代表grouper,o代表other,+号表示添加权限,-表示去掉权限.
修改owner chmod u+r file.txt
修改grouper chmod g+x file.txt
修改other chmod o-r file.txt
下面就是去掉owner的读权限.
[bit@Qkj 07_05]$ chmod u-r file.txt
我们可以通过一次增加所有者多个权限.
可以一次修改多个拥有者的权限.
这里我就要提一个问题了,我们对文件加上某个权限,那么这个文件一定可以这么做吗?是不可以的,下面我们对.txt文件加上可执行,实际上,还是不能执行.
使用八进制
我们都知道在计算机中1代表正确,0代表错误,那么我们是不是可以用0和1来表示自己想要修改文件所有者的权限.而且所有者权限的位置都是固定的,每一组也是,这就可以用八进制来表示如何修改权限.
例如rwx = 111 => 7,-wx = 011 => 3,我们可以通过八进制来修改.
我们可以把777分为 111 111 111依次按位置对象相应的权限位置.
[bit@Qkj 07_05]$ chmod 777 file.txt
对应的权限列表
修改文件的所有者
我们可以修改文件的拥有者和文件的所属组,这两个是不同的指令,我们分开来谈.但是这里需要知道我们要修该的拥有者和所属组都是在Linux环境下存在的,不能给那些不存咋的用户.
修改文件的拥有者
这个很简单,只需要一个简单的指令就可以了.
这个就是把该文件的拥有者改成了root
[bit@Qkj 07_05]$ chown root file.txt
但你一执行这条命令,你会发现报错.
那么这是为什么呢?我这里给大家讲一个故事,一天,你把你的玩具给你弟弟,但是你弟弟死活不要,请问你该怎么办?这就是我们现在的处境,我把文件给了其他人,但是他不要.这时候你就想了个主意,我可叫我妈过来,强压着我弟弟接受这个礼物,在Linux中也是如此,我们可以提高权限,我这里使用的sudo,你的服务器可能还没配置,可以在root用户下强压,道理都一样.
[qkj@Qkj linux]$ sudo chown root file.txt
但是你要记住,一旦你把文件给了别人,你就可可能拥有grouper或者other的权限了,这里我们没必要在列出这个具体的解释了.
修改文件的所属组
这个是我们权限修改的最后一个内容,内容很上面的一样在,这里我就不解释了.
[qkj@Qkj linux]$ sudo chgrp root test.c
这里有一个很重要的东西,你可以一次性修改文件的拥有者和所属组,使用下面的命令
[qkj@Qkj linux]$ sudo chown root:root test.c
[qkj@Qkj linux]$ sudo chown root:bit test.c
目录权限的特别
我们想来谈谈目录这种文件,对于一般文件,上面的很简单,但是对于目录文件我们存在下面的几个疑惑.
可读 是什么意思
可写 什么意思
可执行 是什么意思
可执行
这是我们的三个问题,这里我们先从第三个来谈,目录的可执行是什么意思呢?这个是保证该目录文件时候可以进入.
我们想来把目录的rw都个去除掉,只保留x
[bit@Qkj 07_05]$ chmod u-wr lesson1
这时候我们进入这个目录试试.
你会发现可以进入,但是你要是去除了这个x呢?
可写
在目录文件里面,可写的权限是是可以创建文件.
可读
可读是我们进入后不能够查看当前目录下的文件.
那么这里有一个问题,如果我们知道文件名的,我们是否可以查看当前目录下文件的内容?按道理来说,这是不允许的,毕竟我们都知道文件的路径就像一个吊桥,一段出错,就不可以,我们已经把可读的权限给关了,按理说是不应该的,但是现实是可以的,我们可以理解这是Linux下的一个"bug",记住我们的理解是正确的.
root 权限
我们都知道root是拥有最高的权限,那么相对于一个普通用户创建的文件,root属于other,那么这个权限可以阻碍掉root用户吗?我们来看看现象.
我们把所有的权限都给它撤了,看看root可以吗.
chmod u-rwx,g-rwx,o-rwx file.txt
我们切换到root用户,然后去找到该文件所在的目录,你会发现,即使上面写着你没有权限,但是你仍旧可可以完成你要的工作,root可以说是掌管一切,操纵一切.
我们疑惑为什么文件创建权限的是默认的,而且为何被默认了?这有两个原因
默认 目录的权限是从 777 开始的,普通文件是从666开始
Linux下有一个权限掩码 umask
权限掩码
我们来看Linux环境下的权限掩码,最左边的我们不关心,我们把它看成三个8进制,第一个0先不关心,这个另外的知识.
Linux下规定,凡是在权限掩码出现的1在默认的权限中不出现,这就是775和664的来历.
最终权限是默认的权限减去权限掩码吗
我们这里开始疑惑了,最终权限是默认的权限减去权限掩码吗?我看得到775的结果和减去差不多啊,这里究竟是不是啊?我可以明确告诉你不是.用777这个默认目录权限验证不出来,这里用普通文件的666来演示.
你会发现,这不是一样的吗,是的,这是一个特例,如果我们修改一下umask,你就会发现减法是不对的.
修改 umask
这个倒是挺简单的, umask后面跟上我们想要的数字就可以了.
这样的话我们需要在计算一下,看看文件最终的权限是减法的还是权限掩码出现的1在默认的权限中不出现这个规则.
通过验证就可以知道了,编译器可不是使用的减法.
为何会有权限掩码
这个问题问得好,为何会存在权限掩码?大家想一个场景,你要创建一批特殊权限的文件,你不会一个一个再修改默认的权限吧,这太麻烦了,只要修改出你想的的权限掩码,这样编译器创建的文件最终权限不就是你想要的吗,这就是原因.
粘滞位
大家不要对粘滞位感到疑惑,这就是一个简单的名称.
共享目录
在谈这个之前,我们想来看看一个例子.在现实生活中,我们是不是存在论坛,来自天涯各地的人都可以在这里讨论,我们想在Linux中,是不是可以存在一个目录文件,这个在这个目录文件可以被其他任何人访问,修改等操作,我们用所有者和所属组是root,other可以进行创建修改和查看来演示.
我们用普通用户进入去看看,在理里面我们可以创建删除和修改文件,那么我们已经做好了准备工作.
粘滞位
在这个用户里面,我们也是可以观看其他用户创建的文件,只要是权限够就可以了,但是有一天,你发现自己的文件被别人随便的修改了心里面很恼,我把自己文件的权限给改了,不让其他人人修改和访问.
别人一看,好家伙,你不让我看,好大的胆子,我把你的文件给删了,咱们都别想好过.
这还的了,你删我的,我也把你的的删了,大家都别好过,最终就是两败俱伤.这时候我们需要做一个方法来杜绝这种事情的发生,我们给这个文件加上粘滞位,记住,这个为文件是这个公共的目录文件,大家不要搞错了.
[root@Qkj qkj]# chmod +t all
这样别人就不能删除你的文件了,只有你自己可以删除这个也是粘滞位的作用.
file 指令
虽说我们可以通过文件的前缀可以来查看文件类型,但是还是比较麻烦的,这里提供一个指令,可以查看文件的类型.
[bit@Qkj 07_24]$ file a.out
-----------------------------------
©著作权归作者所有:来自51CTO博客作者玄鸟轩墨的原创作品
https://blog.51cto.com/u_15132397/5624296