目录
用户分类
su指令
认识Linux权限
文件访问者的分类
文件类型和访问权限
文件类型
file指令
访问权限
文件权值的表示方法
字母表示法
八进制表示法
如何修改文件访问者的权限及相关指令
chmod指令
chown指令
chgrp指令
权限掩码与umask指令
umask指令
目录的权限
粘滞位
文章导读
本章主要内容有认识Linux中的用户分类、认识Linux权限相关知识,学会如何查看权限与修改权限、认识粘滞位等等。
我们对权限并不陌生,权限代表着限制。对于某些用户做一些事情是可以的,但其他人却不行。
同样的,在Linux中也存在着权限的概念。既然是限制,那就得针对用户身份,所以Linux中,对于用户身份也有着分类。
正文
用户分类
Linux下有两种用户:
超级用户(root):可以再linux系统下做任何事情,不受限制;
普通用户:在linux下做有限的事情。
其中,超级用户只能有一个,而普通用户可以有很多个。如何添加普通用户我之前已经提到过这里就不作赘述
su指令
功能:用来切换用户身份;(例如,有些时候,作为普通用户没有权限做某些事,可以临时切换为root身份)
语法:su + [用户名字] (su root 此时root可以省略);
认识Linux权限
当我们用 ll(等于ls -l)显示文件的详细信息时:
我们并不知道红色方框中的内容代表什么意思,但是有些能大概猜出来。例如,7 表示的是文件名;6 代表的是文件创建时间;5 代表文件的大小(单位:字节)。
至于其他的内容我们并不清楚,接下来的内容就是认识它们。
文件访问者的分类
当我们要访问某个文件时,我们的身份又有了重新的划分:
文件和文件目录的所有者:u---User;
文件和文件目录的所有者所在的组的用户:g---Group;
其它用户:o---Others ;
对于不同身份的文件访问者,都有各自的权限;
文件类型和访问权限
我们之前看到的第 1 个红框中,有这些符号:
其中第一列代表的是文件类型,其余的代表访问权限。
文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
file指令
功能:查看文件类型;
语法: file [选项] 目标文件或目录;
常用选项:
-c :详细显示指令执行过程,便于排错或分析程序执行的情形;
-z :尝试去解读压缩文件的内容;
实际上Linux系统并不会识别你自己取得文件后缀(例如 test.txt 和t est.c),在系统眼中,它们都是普通文件。但是系统不关心并不代表某些软件不关心(例如不能用gcc编译 .txt文件),所以文件后缀一般还是不要省略。
访问权限
除了第一列,剩下得每 3 个为一组,分为三组。
第一组表示文件和文件目录的所有者(user)的权限;
第二组表示文件和文件目录的所有者所在的组的用户(group)的权限;
第三组表示其他用户(other)的权限。
文件权值的表示方法
字母表示法
八进制表示法
如何修改文件访问者的权限及相关指令
chmod指令
功能:设置文件的访问权限;
语法:chmod [选项] 目标文件;
常用选项:
-R :递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限。
chmod指令的不同格式:
① 用户表示符+/-权限字符
+:向权限范围增加权限代号所表示的权限;
-:向权限范围取消权限代号所表示的权限;
=:向权限范围赋予权限代号所表示的权限;
用户符号:
u:拥有者
g:拥有者同组用户
o:其它用户
a:所有用户
示例
chmod u+r test.txt chmod u-w test.txt chmod u+r,u+w,o+x test.txt chmod a+r test.txt chmod a-w test.txt
②三位8进制数字
示例:
chmod 000 test.txt chmod 777 test.txt chmod 667 test.txt
chown指令
功能:修改文件的拥有者;
语法: chown [选项] username 目标文件 ;
常用选项:
-R :递归修改目录文件的拥有者
示例:
chown root test.txt chown -R hxy mydir
chgrp指令
功能:修改文件或目录的所属组;
语法: chgrp [选项] 用户所属组名 目标文件 ;
常用选项:
-R :递归修改目录文件的所属组
示例:
chgrp root test.txt chgrp -R hxy mydir
权限掩码与umask指令
文件的权限生成其实是有一个过程的,有这样一个问题,为什么我们创建一个新文件时,它的权限是我们看到的那个样子?我们能修改这个默认的权限吗?
我们最终所看到的权限就是默认权限也叫最终权限,它的生成经过这样的过程:
最终权限 = 起始权限 & (~umask) (umask为权限掩码)。
起始权限:系统设定的,及文件一出生系统认为应该带有的权限。普通文件:666;目录文件:777。
权限掩码:三位八进制数字,用来控制最终权限的生成。
umask指令
功能:查看或修改文件掩码;
语法: umask 权限值 ;
示例:
目录的权限
可执行权限 x :如果目录没有可执行权限,则无法cd到目录中;
可读权限 r :如果目录没有可读权限, 则无法用 ls 等命令查看目录中的文件内容;
可写权限 w :如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。
有个疑问:故事如下:
在公司里,张三和李四共同掌管一个共享目录。该共享目录由老板 root 创建,且对于other有rwx权限(意味着谁都可以在共享目录创建或删除文件)。
张三在共享目录下创建了一个文件,对other的权限只开放了 r 与 x;意味着李四只能读文件而不能修改内容。但是李四心生歹意,你不让我写。我就删掉你的文件。结果该文件被删除,对张三乃至公司造成了极大的损失...
那么有什么办法能限制其他人不能在共享目录删除我的文件呢?
答案是,当然有,就是给共享目录添加粘滞位。
粘滞位
添加方法:
chmod +t 目标文件
当一个目录被设置为"粘滞位",则该目录下的文件只能由
▶ 超级管理员删除;
▶ 该目录的所有者删除;
▶ 该文件的所有者删除。