文件权限
1. 文件权限概述
Linux为了保证系统中每个文件的安全,引入了文件权限机制。针对系统中的每一个文件Linux都可以提供精确的权限控制。它可以做到不同的用户对同一个文件具有不同的操作权力。而通常这个权力包括以下3个:
- 读的权力(Read,简称r)
- 写的权力(Write,简称w)
- 执行的权力(eXecute,简称x),在Linux系统中,可执行的文件的扩展名一般叫做:xxx.sh,在windows系统中可执行文件扩展名一般为xxx.exe。
具体的权限值:rwx(读、写、执行)。这个我们已经知道了。但是上面还提到了 “不同的用户对同一个文件可以有不同的权限”中“不同的用户”指的是哪些用户呢?所以这个文件的用户也是包括3类用户:
- 文件拥有者(User,简称U):该文件的创建人;
- 同组用户(Group,简称G):和创建人在同一组的用户;
- 其他组用户(Other,简称O):和创建人不在同一组的用户。
这就是非常著名的UGO模型。也就是说一个文件的权限包括三组:
- 第一组U:我们可以给文件的创建者设置rwx权限;
- 第二组G:我们可以给文件创建者的同组人员设置rwx权限;
- 第三组O:我们可以给和文件创建者不在同一组的人员设置rwx权限。
前面在写ls -l命令的时候,出现的rwxr-xr-x其实就是这个,一共是九个字符,三三一组,每组代表U、G、O的权限。第一个rwx是U的权限,第二个是G的权限,第三个是O的权限。
2.查看文件的权限
采用 “ls -l” 命令可以查看文件的具体权限,如下:
每一个文件或者目录采用 ls -l 查看之后,第一个字段描述了文件类型 + 文件的权限。第一个字段共10个字符:
- 第1个字符:代表文件的类型, “ - ”代表文件,“ d ”代表目录;
- 其实Linux中文件的类型一共有七种:
- “ - ” 代表普通文件;
- “ d ” 代表目录;
- “ l ” 代表软连接;
- “ c ” 代表字符设备(通常以字节流的方式访问);
- “ p ” 代表管道文件(主要用于进程间通讯);
- “ s ” 代表套接字文件(主要用于网络通讯);
- 第2,3,4个字符:代表文件创建者对该文件的权限;
- 第5,6,7个字符:代表与文件创建者在同一组的用户对该文件的权限;
- 第8,9,10个字符:代表其他组人员对该文件的权限。
3. 基于UGO设置文件权限
修改权限的命令是:chmod,如果采用UGO方式修改权限的话,大致语法是这样:
- 给同组人员添加(用加号+)写权限:
chmod g+w test1.java
- 给同组人员和其他组人员添加写权限(不同组之间用逗号隔开):
chmod g+w,o+w test1.java
给同组人员和其他组人员添加读和写权限:
chmod g+rw,o+rw test1.java
删除(用减号 -)同组人员和其他组人员写的权限:
chmod g-2,o-2 test1.java
4. 基于421设置文件权限
421采用不同的数字来表示不同的权限,我们前面说了一个文件会有rwx(读、写、执行)的权限,那把rwx当成三位二进制,如果某一位上为1表示有权限,0表示没有权限,那刚好读就是100,即4;写就是010,即2;执行就是001,即1。
- 4代表读
- 2代表写
- 1代表执行
例如:如果让一个用户读、写、执行权限都有的话,那就是111,即4+2+1=7,那么7就代表rwx权限都具备,其他的组合也是类似。不过需要注意一下,有些数字设置可能是不合理的,比如说3,即011,这个数字代表的是有写的权限,但是没有读的权限,说实话这不是扯淡呢么,我写的时候不就已经读了么,这里不合理的情况,稍微注意一下。
所以通过421这几个数字的组合一共有以下几种:
- 0:无权限;
- 1:x;
- 4:r;
- 5:r + x;
- 6:r + w;
- 7:r + w + x;
也就是一共6个数字:0 1 4 5 6 7;
使用421设置权限,基本语法是这样的:
chmod 三个数字 文件名
例如:
chmod 755 test1.java # 表示权限:rwx r-x r-x
5. chown修改文件拥有者
在Linux中,可以使用 chown(change owner) 命令来修改指定文件或目录的拥有者和所属组。chown命令基本语法如下:
chown [选项]...[所有者][:[所属组]] 文件...
其中,所有者和所属组可以是用户名或用户ID、组名或组ID,如果省略冒号:和所属组,则默认修改文件的所属者。(一般来说chown就用来修改文件拥有者就行,chgrp用来修改文件所属组)。
下面是一些常用选项:
- -R:递归修改,包括子目录和文件;
把a.txt文件拥有者从root改为zyx:
chown zyx a.txt # 由于只是个文件,所以没必要加-R参数
把test文件夹的拥有者从root改为zyx:
chown -R zyx test