目录
2.1.1Linux下有两类用户:普通用户(user)、超级用户(root)
a)文件类型: (可以使用file [文件名]来查看文件的类型)
4.3当我们想要在文件夹里创建一个文件的时候需要什么权限呢??
一、为什么要有权限
对于为什么要有权限这个问题,我们首先要知道权限是着眼于能不能的问题,我们可以在生活中找到相应的例子:比如每个人家的大门上都会上锁,此时权限给我们的限制就是我们能不能进入这个大门,如果有则可以,反之则不能。而在Linux中权限问题:一、解决了人员协作时对文件的管理问题,比如说程序员A可以操作某代码,而程序员B不能。二、解决了程序交付时,给用户的权限,比如一些程序仅有只读权限或者只能运行的权限,限制用户对源码进行更改。当然这里只是举了两个例子,权限的能力包括但不限于此。(额外说一句,权限是解决能不能得问题,但是假如操作对象没有对应的属性,即便有权限也是不能完成对应功能的,比如:我们不会去leetcode上看电影,也不会上B站上刷题)
所以说,权限在我看来就是:有没有完成某一操作的能力。
二、Linux权限
2.1概念
2.1.1Linux下有两类用户:普通用户(user)、超级用户(root)
·超级用户(root) :可以在命令行中执行任何操作
·普通用户(tmp_user):操作受限制,受限于权限
2.1.2在命令行中也有相应的体现:
注:如果想切换用户可以使用如下命令:
su [用户名] //如何用户名是root则可以省略
但是要注意root切换为普通用户时,不需要输入密码。但是普通用户切换为root用户时需要输入root账号的密码。
若想一段时间内提升权限可以使用如下命令:
sudo //(需要root用户先授权,普通用户才能使用):
sudo指令调用失败:
2.2权限管理
2.2.1文件访问者的分类:
拥有者:文件和文件目录的所有者(u----user)
拥有组:文件和文件目录所有者所在的组织的用户(g----group)
其他人:不属于以上两种身份的用户(o----others)
2.2.2 文件类型和访问权限:
a)文件类型: (可以使用file [文件名]来查看文件的类型)
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
在windows中文件类型是以后缀来显示的,而在Linux中文件类型是以文件信息的第一列来显示的,但这并不意味着Linux中文件的后缀是无意义的。比如:在Linux系统中,编译程序时,不会卡后缀名,但是若使用gcc等编译工具就不一定了。
文件信息的第一列就是文件的类型:
b)访问权限:
注意:权限的每一列表示的含义是固定的,有对应的权限就用对应的字符表示,没有则用‘-’表示,如下图:红框框住的表示的是——其他人有执行权限
2.3权限的表示方法:
1.字符表示法
Linux表示 | 含义 | Linux表示 | 含义 |
--- | 无权限 | r-- | 只读 |
-w- | 只写 | --x | 只执行 |
rw- | 可读写 | -wx | 可写、可执行 |
r-x | 可读、可执行 | rwx | 可读、可写、可执行 |
总结:‘-’表示无权限,‘r’表示读权限,‘w’表示写权限,‘x’表示执行权限。
2.八进制数值表示法
权限符号 | 八进制 | 二进制 |
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
--- | 0 | 000 |
此表显示的是一位访问者的权限,如果是多位访问者的话,根据此表进行调整即可:
举个例子:(以下提到的权限限于读权限[r]、写权限[w]、执行权限[x])
假如说一个文件任何人都有且仅有读权限,那么符号表示为r--r--r--,八进制表示为444。
假如说一个文件任何人都有任何权限进行操作 ,符号表示为rwxrwxrwx,八进制表示为777
注:超级用户(root)不受权限制约。(权限是用来限制普通用户的)
2.4权限的匹配问题:
假如现在有一个这样的文件:
似乎一切看起来是那么的合理,但是也许你会有一个问题,就是 虽然我身为所有者没有读权限,但是我身为所属组有读权限:
那为什么现在我不能读取该文件呢? 我就不可以先以所有者身份匹配一下,不匹配就以所属组身份匹配一下吗?
答案当然是不可以的,在Linux操作系统中权限只会匹配一次,如果成功则有权限,反之则没有权限。
三、如何更改文件权限
根据上文提到的权限表示方法,结合chmod指令进行更改,
chmod具体使用方式如下:
chmod[空格][访问者符号][+或-(可选)][权限(可一次输入多个选项)][空格][文件名]
访问者符号:拥有者(u)、拥有组(g)、其他人(o),所有用户(a)
权限:根据上文提到的文件权限表示方法进行选择输入可一次输入多个选项(+或-只在符号表示法的时候使用,当使用八进制表示法时可以略去这一项)。
额外补充两条指令(希望读者能自行搜索):
chown(更改文件拥有者)
chgrp(更改文件拥有组)
四、权限对文件夹的影响
4.1当我们想要进入一个文件夹的时候我们需要什么权限呢??
答:需要文件夹的执行权限
4.2当我们查看文件夹内容的时候需要什么权限呢??
答:需要读权限
4.3当我们想要在文件夹里创建一个文件的时候需要什么权限呢??
答 :需要写权限
总结
文件夹的读权限是指用户有没有在文件夹中查看内容的权限
文件夹的写权限是指用户有没有在文件夹中创建、删除、重命名文件的权限
文件夹的执行权限是指用户有没有进入文件夹的权限
root不受权限控制
五、文件掩码
5.1查看文件掩码
说明:
文件掩码是一组八进制数,只有文件掩码的后三位参与文件权限的计算
文件掩码的第一位根据取值有以下含义(合理使用可以使除root用户以外的使用者无法访问文件)
0,表示没有设置特殊权限掩码,所有特殊权限都将使用默认值。
1,表示禁用执行位的获取权限(即不允许用户、组或其他用户获取文件的执行权限)。
2,表示禁用写入位的获取权限(即不允许用户、组或其他用户获取文件的写入权限)。
3,表示同时禁用执行位和写入位的获取权限。
4,表示禁用读取位的获取权限(即不允许用户、组或其他用户获取文件的读取权限)。
5,表示同时禁用执行位和读取位的获取权限。
6,表示同时禁用写入位和读取位的获取权限。
7,表示同时禁用执行位、写入位和读取位的获取权限。
5.2更改文件掩码
5.3文件掩码的计算
新建文件的默认权限是0666(只计算后三位)
新建目录的默认权限是0777(只计算后三位)
计算原则:[默认权限]&[~umask]
六、粘滞位
在开始讲解前,请先想象这样一个场景:
当一个文件需要多名人员协作时,往往要设置权限防止参与人员恶意破坏文件,但是如果我们在程序员A的目录下由程序员B写了一个文件,而程序员B设置了文件任何人不可读、不可写、不可执行,这意味着,程序员A是无法访问一个由他人建立在自己目录下的文件。但是,由于是建立在程序员A的工作目录下的文件,程序员A可以通过更改目录权限,而后通过指令删除程序员B写的文件(这一点是毋庸置疑的,上文我们提到了,对文件夹中的文件进行删除操作只需要该文件夹有W权限即可)。那么,就会造成这样一个问题,当程序员B想要续写文件时,会发现,文件已被删除。
因此,当一个工程需要多人协作时,为了打破个人目录下只有目录拥有者和root用户能进行访问的局限,往往需要在根目录下新开辟一个工作文件夹
这一文件夹将有root创建,并将权限完全放开。
但是问题解决了吗?
显然没有,当一个文件夹对所有人开放时,那么意味着程序员A仍可以将程序员B写的程序删除。此时如果你足够细心就会发现,协作文件夹的其他人权限中的x权限变为了t权限,这里的t权限就是我们说的粘滞位,那么他有什么用呢?
当一个文件夹被设置粘滞位(chmod +t)时,该目录下的文件只能由:
1.root用户删除
2.目录拥有者删除
3.该文件的拥有者删除
注意:对一个文件设置粘滞位是没有意义的,因为文件能否被删除于该文件所处的文件夹权限有关,一个文件能否被执行于该文件的x权限(执行权限)有关。所以粘滞位对于一个文件而言意义不大 。