目录
在权限问题(1)中,我们了解到:权限= 用户角色(具体的人)+文件权限的属性。? ??
本章我们将对用户角色和文件权限属性展开更加深入的解读。
- 文件和文件目录的所有者: u---User
- 文件和文件目录的所有者所在的组的用户: g---Group
- 其它用户: o---Others?
Windows中是如何区分文件类型的?后缀名
但Linux不是通过后缀区分文件类型!
证明:
????????我们gcc生成了可执行文件a.out 我们执行它打印出了hhh,我们将a.out mv到a.sdsadsa,执行这个文件它同样可以正常执行,因此可以说明,inux不是通过后缀区分文件类型。
Linux是通过第一个属性列来区分文件类型。但是Linux上面的工具可能区分(eg:gcc)
文件类型:
- ? ? ? ? d:目录文件(文件夹)
- ????????-:普通文件(文本文件,可执行程序,库等)
- ????????l:软链接(类似Windows的快捷方式)
- ? ? ? ? b:块设备文件(例如硬盘、光驱等)
- ????????p:管道文件
- ????????c:字符设备文件(例如屏幕等串口设备)
在xshell中显示器文件一般都在,/dev/pts中,下面的0和1就是表示我们开了两个终端,序号为0和序号为1的终端
在Linux中一切皆文件,我们可以像访问文件一样去访问显示器这样的硬件设备
- ????????s:套接口文件
基本权限:
三三为一组,分别对应:拥有者,所属组,other。
- ? ? ? ??i.读(r/4): Read对文件而言,,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- ????????ii.写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
- ????????iii.执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- ????????iv.“—”表示不具有该项权限
eg:
????????test.txt文件,他的拥有者有读写权限,但没有可执行权限,他的所属组有读写权限,但没有可执行权限,other只有读权限。
我们想修改一个人的权限,这时我们要用到一个指令:chmod
?功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
- ????????R -> 递归修改目录文件的权限
- ????????说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式
① 用户表示符+/-=权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
eg:去掉testr.txt中ugo的所有权限
如图(testr.txt中ugo的所有权限都被去掉了)
? ? ? ? 加回testr.txt中ugo的所有权限
如图(testr.txt中ugo的所有权限都被加回了)
????????上面的这种方式适合对1种或者2种角色的权限进行修改,如果想修改所有人的权限,这里有更简便的方法
如图(a就代表所有人了)
????????我们可以看到,此时test.txt的拥有者拥有文件的读写权限,我们成功的向test.txt中写入了“hello”,从文件中成功的读出了“hello”。
? ? ? ? 这时我们删掉了test.txt拥有者读写的条件,对文件进行读写操作,结果发现无权限。
????????这说明,普通用户要受到对应的权限约束,即使这个文件时自己的。
我们su,进入root账户下,结果发现仍然可以进行读写操作。
????????说明 root账户不会受到权限的约束。但除了root以外其他的普通用户都是可以被限制的。
权限存在的意义:是为了保护普通用户的文件的一般安全性。
????????这里有个小细节:在上面操作中我们发现,拥有者和所属组都是light,我们把拥有的权限修改了, 结果发现light所属组的身份并没有起到作用。
? ? ? ? 这是因为,Linux进行身份匹配的时候,对用户身份进行识别,只识别一次。(light已经和test.txt文件的拥有者身份匹配过了,在当前指令下就不会在进行第二次匹配了)
我们来证明一下:我们先把拥有者改成root,改成root后,light就只是所属组了,就有权限对test.txt进行读写操作了。
这里我们要介绍两个指令:chown&&chgrp
chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
1. 将拥有者修改成root2. 切换回light,尝试对test.txt进行读写
(发现权限并没有被限制)
*****关于可执行权限与可执行
eg:我们给test.c中拥有者加上了可执行权限,但是这个文件并不可以执行,原因是这个文件不是一个可执行的文件。
我们gcc test.c 生成可执行文件 a.out。只是后才可以执行
现在我们去掉可执行文件a.out拥有者的可执行权限,这时候文件就不能执行了。
所以,在这里我们可以得出一个结论:
? ? ? ? 可以执行=有文件的执行权限+该文件是一个可执行文件
我们在权限问题的第一章有谈到过:权限= 用户角色(具体的人)+文件权限的属性。
在上面我们主要对文件的属性进行了操作,现在我们谈谈对用户角色的操作。
? ? ? ? 在3.中,我们在root下将test.txt的拥有者改成了root,那么现在,我们在light下将test.txt的拥有者改成root
发现我们并没有权限修改。这相当于把文件给别人,在Linux中把文件给别人,这个动作也是需要权限的,因为Linux无法识别文件的好坏,这样可以有效的保护用户。
? ? ? ? 那么我们如何将文件给别人呢,这里就要用到sudo,将指令提权,这就可以无视权限,将文件给别人了。(只有被root用户添加到信任列表里面的人才可以用sudo命令,这种方式一般常用于公司里面,现阶段我们用不到sudo,可以直接使用su变成root账户来模拟操作),实际上就是变相的把判断文件好坏的这一部分交给了人来做。
eg:将拥有者变成root
eg:将所属组也改成root
eg:简便方法,将所属组和拥有者一次性都改成light
8进制数值表示方法
????????拥有者,所属组,other都是三三为一组。
我们把是由否有权限:是用1代替,否用0代替。
那么rw,我们就可以对应的写成110,那么转成八进制就是6,所以6就等于rw的效果。
rg:如果想表示文件的全部权限(u--rw ,g--rw,o--r)
rw6 rw6 w4来表示。
文件=内容+属性
目录也是文件,目录的内容就是:该目录里面的所有的文件信息详情数据。
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
在目录里删除一个文件是和目标文件是没有关系的!!!
? ? ? ?之和它所在的目录有关,目录的权限有多大,那么就决定了用户对目录中文件权限的大小。一个普通用户是一个目录的拥有者,并且拥有该目录的最大权限,该目录中如果有root创建的文件,那也是可以最该文件进行任意操作的!
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。我们可以看到新建目录的默认权限是0776,新建文件的默认权限是0664。
这是为什么呢?
????????原因就是创建文件或目录的时候还要受到umask的影响。
mask?功能:查看或修改文件掩码
假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
通过查看我们发现,Linux系统文件掩码默认值是0002
eg: 创建文件默认权限是0666,那么0666还要? 按位与 上取反的umask的值