文章目录
- 前言
- 1.shell外壳的理解
- 2.关于权限理解
- 1.Linux下的用户
- 2.角色划分
- 3.文件和目录的权限
- 3.粘滞位
- 3.总结
前言
Linux中的操作都是通过在命令行上敲指令来实现的,本文将简单的介绍Linux中的外壳程序shell以及浅谈一下对Linux中的权限理解。
1.shell外壳的理解
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者.
为了更好理解shell外壳程序,我将画图举例。
上图中的张三就相当于用户,如花就相当于操作系统。shell程序外壳是一个统称,在Liunx机器中大部分默认shell外壳程序是bash,这个shell程序外壳就相当于媒婆,bash相当于王婆。
综上shell外壳存在的意义如下
1.方便用户进行命令行的传递和返回操作系统的执行结果
2.保护操作系统
最后一点,王婆招聘实习生,相当于执行命令时创建子进程来执行
2.关于权限理解
关于权限的概念,我们日常生活中就有很多例子。比如爱奇艺的某些影片需要会员才能看,小区保安会拦住不是业主的陌生人。因此简单来说,
权限是某种事情是否被允许由谁做。权限是用来限制人的,同时访问的对象可能天然不准备某种属性,就会不赋予我们这样的权限。我们不能在爱奇艺上写代码,因为爱奇艺天然不具备写代码的属性。所以,权限就是 人(角色)+ 事务属性。
1.Linux下的用户
刚才提到了,权限是人(角色)+事务属性。在Linux中可以将用户分为两种角色。一种就是超级用户也就是root用户,另一种就是普通用户。root用户的权限是很大的,基本上在Linux中畅通无阻,没有什么权限能够限制。普通用户权限有限,对于某些操作是不被允许的。在Linux中可以通过命令进行用户切换。
su 用户名 (切换用户)
从root用户切换到普通用户,su后跟用户名即可。从普通用户可以直接su 然后回车。同时需要输入root密码,su -回车会切换到root的用户目录下。su回车,之前在普通用户的当前路径,切换后路径不变。
2.角色划分
当我们使用ll指令时,会出现如下图所示的画面,关于图中的符号我们来详解一下
我们知道一般来说东西都有所有者,也是说东西是有主之物。在Linux中,文件和目录也都有所有人。一般来说,哪个用户创建该文件或者目录,哪个用户就是所有者。那么对于其他的用户来说该文件或者目录都是"别人家的"。对于文件来说,除了文件所有者,别的用户都是其他用户,也就是Others。
因此对于文件或者目录来说,所有用户可以划分为2个角色 所有者,其他人.
既然可以根据文件的所有权将用户分为所有者和其他人,为什么还要划分出所属组呢?
其实这个也很好理解,我们知道在实际的大型开发项目中,很多人都会共同负责维护同一个模块。那么除了该项目的创建人外,还需要和其他同事一起协作,那么这个项目就不仅仅属于一个人了,而是属于一个组了。这样便于分配不同的权限给不同的角色,有利于更好的管理项目。
同时一般文件默认所属组和所有者的用户是一样的。
3.文件和目录的权限
有了上面的角色划分,我们在回过头来看看文件的权限。在谈文件权限之前,我们来看看文件的类型。
Linux中文件可分为以下几种类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文
Linux中的文件类型和Windows下的文件类型区分方式是不太一样的,windows中是根据文件后缀来区分文件类型的,Linux(操作系统)是根据以上的特定符号来区分的。所以在Linux中我们可以将文件后缀看作为文件名的一部分。
之前提到了文件和目录对角色赋予的权限有3种:读 写 执行,在ll指令下这3者的位置是固定的,同时对于3种角色来说位置也是固定的。
3种权限为一组,第一组对应着所有者 第二组对应所有组,第三组对应其他用户。
通过指令是可以更改文件和目录所属组和所有者的
chown 用户名 文件名 ,(更改文件所有者)
chgrp 组名 文件名 (更改文件所属组)
更改文件所属组和所有者是需要用到root权限的,这也很好理解。当你给予某人东西的时候,请问需不需要征得对方同意呢?那肯定是需要的,不能什么东西都接,万一别人给一口黑锅那肯定是拒绝的。所以在Linux中只能通过root用户的权限强制更改文件的所属组和所有者,让其他用户强制接受。
同时还有一个指令可以更改所有者 所属组 其他用户对文件的权限
chmod [参数] 权限 文件名
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
该指令不需要root权限,文件所有者即可更改
文件和目录权限另一种表示方法
之前提到了文件和目录对应角色的对应权限的位置是固定的。3种权限为一组,因此可以用8进制来表示文件和目录的权限。1就表示该位置具有对应的权限,0表示对应位置不具有对应权限。举个简单例子777 转成二进制就是 111 1111 111 转成对应位置权限就是 rwx rwx rwx 。再举一个例子 621 转成二进制就是 110 010 001 对应权限就是 rw- -w- --x。
有了上述另一种权限表示法,我们引出另一个问题为啥创建一个文件后默认权限这样的呢?(如下图)
其实Linux中文件的默认起始权限是666,目录的默认起始权限是777,但是系统为了更好的管理文件和目录权限于是就有了权限掩码,起始权限&(^权限掩码)即为最后用户看到的默认权限。
umask指令可以查看系统的权限掩码
下面我将画图解释上图中的默认权限是664
同时这个权限默认掩码可以通过umask指令进行修改
3.粘滞位
在谈及粘滞位之前,我们先搞明白3个问题.
1.查看一个目录下的文件属性需要什么权限呢
2.删除或创建一个目录的下的文件需要什么权限呢?
3.进入某个目录需要什么权限呢?
从图中显而易见,当目录赋予某类用户读权限时,这类用户才能查看该目录下文件属性。当目录赋予某类用户写权限时,这类用户才能删除创建该目录下的文件。当目录赋予用户可执行的权限时,该类用户才能进入目录。
在使用Linux时,未来开发过程中可能会产生一些共享目录,该目录一般是由root用户创建,这种目录主要是用来保存普通用户产生的一些临时数据。当目录被共享时,虽然用户会受到权限限制,但是拦不住别人删除其他用户所创建的文件。总不能把写的权限给关了,这样所有人都创建不了自己的文件。为了解决这一问题,Linux中给目录引入了粘滞位的概念。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
粘滞位只能设置给目录,因为是目录的权限影响到了文件的删除
3.总结
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,即使可以执行ls命令,但仍然没有权限读出目录下的文档属性。
- 权限的存在是为了更好的管理目录和文件,同时也保护了操作系统。以上内容如有错误欢迎指正!