学习Linux我们都知道“一切皆文件”,是文件便有拥有者及非文件拥有者的区分
所以也很好理解,在Linux下,权限即是操作者(用户)对于文件的“使用”权限
大白话来说就是关于这个文件,你(用户)能做什么,不能做什么
(或者说是:权限即为一件事情是否允许你做)
从大的角度来说,Linux下有两种用户:超级用户(root)和普通用户(即管理员和其它用户)
超级用户可以在Linux系统下做任何事情,不受限制;而普通用户则只能做有限的事情
tips:超级用户的命令提示符为“#”,普通用户为“$”
我们本篇要探讨的主要即是文件的权限
Linux下的文件权限
首先,我们要知道的是,修改文件的任何权限,属性都需要是文件的所有者才可进行
否则则会出现“Permission denied”
我们先来创建一个文件:
该文件对应的属性即如下
我们来逐个分析该文件的一些属性
首先是文件类型,其具体分类如下
- d:即为文件夹
- -:即为普通文件
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
其次即是具体的文件权限分类
Linux下权限的限制者主要分为三类:文件拥有者、文件的所属组以及其它用户
- 文件的所属组即该文件具体属于某个用户组(可以有多人),该种分类更加灵活,使得文件不仅仅限于文件拥有者(一个人)与其它用户(拥有者之外的所有人)之间太过于死板
- 除了前两者之外的用户都属于“其它用户”的分类
无论是属于该文件的哪一种用户对象,都只有三种权限(且其对应顺序不变)
- r(读权限):可以查看目录下的文件或目录
- w(写权限):可以在目录下创建(删除)文件或目录
- x(可执行权限):可以执行该文件(程序),或进入该文件
tips:是否可以进入一个文件要看是否拥有x权限
ps:用户和权限之间并没有直接的关系
关于文件权限,大体都了解的差不多了,那我们如何对文件权限进行修改呢?
修改权限的方式:
一、
(只有文件的拥有者才可以修改文件的权限,若要修改其它人的文件则需要sudo提升权限)
u---拥有者 g---所属组 o---other a---all
可以单个进行修改
chmod u+x file1.txt(给file1.txt的拥有者添加x可执行权限)
chmod g-rw file2.txt(给file2.txt的所属组删除rw可读可写的权限)
chmod o+rwx file1.txt(给file1.txt的其它者(other)添加rwx权限)
也可以批量修改
chmod u+x,g-rw,o+rwx file1.txt
chmod ugo+rwx file1.txt
再往后几列,分别对应文件的硬链接,文件的拥有者,文件的所属组,
文件的大小以及文件的修改时间还有文件名称
-rwxrwxr-x. 1 coderX coderX 9096 Jul 25 16:35 a.out
drwxrwxr-x. 3 coderX coderX 18 Jul 25 16:22 dir
二、
权限为0则不具备该权限,为1则说明具备该权限,任何一个人都只有三种权限,故以000~111--->八进制数对应其对应的权限
e.g. 6即110 即rw-
e.g. 755即111 101 101即rwx r-x r-x
chmod 八进制数 filename
修改文件的拥有者和所属组:
sudo chown root file1.txt(将file1.txt的拥有者修改成root)
sudo chgrp root file1.txt(将file1.txt的所属组改成root)
sudo chown cxt:cxt file1.txt(将file1.txt的拥有者和所属者都改成cxt)
基础权限了解了之后,我们再来了解一个相关的知识点:粘滞位
粘滞位主要是解决以下业务场景所发生的问题:
假设我们需要在daily目录下进行多人协同办公,所以将权限全部赋予了所有用户
然后我们在daily目录下进行工作,假设root在该目录下创建了一个myfile.txt,并将权限设置的仅自己可读可写可执行
此时我们作为文件的其它用户,是无法对该文件进行读写的,如下
但是我们此时作为其它用户去尝试删除该文件时却发现能够成功删除掉该文件
这很明显即是一个不合理的操作,故此粘滞位便由此引出
我们(目录拥有者)可以将该目录设置粘滞位的权限
chmod +t 目录名
我们可以看到,在目录的其他用户的可执行权限变为了t即设置成功
此时进入该daily目录
我们再次尝试删除他人的文件则发现该文件无法被其他用户删除
存在了粘滞位权限后则在同一个目录下,多个用户同时具备读写权限时,也不能删除目录下不属于自己的文件,只能删除自己拥有的文件
ps:粘滞位只能给目录的other设置,且粘滞位只能由目录所有者添加或删除
最后我们再介绍一个小的知识点:权限掩码(umask)
umask:权限掩码
(在权限掩码中出现的权限都不应在最终权限中出现)
我们可以如上查看默认的权限掩码
创建目录时起始权限从777开始,普通文件起始权限从666开始
最终权限 = 起始权限 & (~权限掩码)
我们可以看到默认创建的目录和文件的基础权限并非777与666,这其中缘由便是因为权限掩码的存在,以默认的权限掩码0002计算,最终权限的得出过程如下(文件的计算方式相同)
故此权限最后会如上所示,如若设置权限掩码为777
创建目录后则最后的权限则会变成如下情况
![]()
写在最后:
以上便是关于Linux权限的全部基础内容了,如果对你有帮助的话还请点赞关注转发支持一下