用户与用户组的概念
-
文件所有者
文件所有者拥有对自己所创建文件的所有权限,有权修改所属文件的三类访问者的访问权限(文件所有者,用户组,其他人)
-
用户组
同一用户组内的用户可以互相访问各自公开给同组用户的文件,一般来说,属于同一个用户组的用户会比不属于用户组的其他用户对本组成员所属文件拥有更多的访问权限。
一个用户组可以包含多个用户,一个用户可以同时参与多个用户组 -
Linux 用户身份与用户组记录的文件
- /etc/password : 默认情况下,所有系统上的账号与一般用户身份记录在此文件内
- /etc/shadow : 记录用户的个人密码(当然是加密之后的)
- /etc/group : 记录所有组名
Lunux 文件权限
-
文件属性分析
在任意目录下执行下面代码,便可查看当前目录下所有文件的属性
ls -la
-
第一列(文件权限)代表这个文件的类型与权限
- 各部分的含义
// 文件权限的格式如下 -rwxrwx--- // 可以分下面的四部分看 - rwx rwx --- 文件类型 文件所有者权限 文件所属用户组权限 其他人对此文件的权限
- 文件类型
- d: 目录
- -: 文件
- l: 连接文件
- b: 设备文件里面的可供存储的接口设备
- c: 标识设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取设备)
需要注意的是,目录与文件的权限意义并不一样,上面讨论的是文件的权限
第二列(连接数)代表有多少文件连接到此节点(i-node)
i-node中记录了一个文件的权限和属性等信息,每个文件名会关联到一个具体的i-node。连接数代表有多少个文件名连接到同一个i-node上第三列(文件所有者)表示这个文件或目录的“所有者账号”
第四列(文件所属用户组)表示这个文件所属用户组的名字
-
第五列(文件大小)表示这个文件的大小,默认单位为B
ps: 可以在ls的时候加上参数-h,会以更可读的格式显示文件的大小
第六列(文件最后被修改时间)表示这个文件的创建日期或者是最近的修改日期
第七列(文件名)表示该文件的文件名
-
-
改变文件的属性与权限
- chgrp: 改变文件所属用户组
- chown: 改变文件所有者
- chmod: 改变文件的权限
-
改变文件所属用户组:chgrp
# 用法 chgrp [-R] <用户组名> <目录名或文件名> # 参数说明 -R : 进行递归(recursive)的持续更改,即连同子目录下的所有文件目录都更新为指定的用户组。 常常在更改某一目录下所有文件的情况下使用
-
改变文件所有者:chown
# 用法 chown [-R] <账号名称> <文件名或目录> 或者 chown [-R] <账号名称:组名> <文件名或目录> # 参数说明 -R : 进行递归(recursive)的持续更改,即连同子目录下的所有文件都要更改
-
改变文件权限:chmod
########################################## ### 用数字类型来改变文件权限 ########################################## # 用法 chmod [-R] xyz 文件或目录 # 参数 xyz: 分别代表用户、用户组、其他用户的用户权限的二进制表示(以rwx为顺序,有则对应位置为1,否则为0)值(例如:rwx: 7 / -wx: 3 / -w-: 2) -R: 进行递归(recursive)的持续更改,即连同子目录下的所有文件都要更改 # 举个栗子 sunny@DESKTOP-A80BM1L:~/test$ ls -l a.txt -rw-rw-rw- 1 sunny sunny 5 8月 15 11:45 a.txt sunny@DESKTOP-A80BM1L:~/test$ chmod 772 a.txt sunny@DESKTOP-A80BM1L:~/test$ ls -l a.txt -rwxrwx-w- 1 sunny sunny 5 8月 15 11:45 a.txt ########################################## ### 用符号类型来改变文件权限 ########################################## # 用法 chmod [u|g|o|a] [+|-|=] [r|w|x] <文件或目录> # 参数 u: user g: group o: others a: all(表示同时设置用户,用户组和其他用户的权限) +: 增加 -: 移除 =: 设置 r: 读 w: 写 x: 执行 # 举个栗子 sunny@DESKTOP-A80BM1L:~/test$ ls -l a.txt -rwxrwx-w- 1 sunny sunny 5 8月 15 11:45 a.txt sunny@DESKTOP-A80BM1L:~/test$ chmod o+r,g-x a.txt sunny@DESKTOP-A80BM1L:~/test$ ls -l a.txt -rwxrw-rw- 1 sunny sunny 5 8月 15 11:45 a.txt
-
目录与文件权限的意义
-
文件的权限
- r(read):可读取此文件的实际内容,如读取文本文件的文字内容
- w(write):可以编辑、添加、删减该文件的内容(但是不包含删除该文件)
- x(eXecute):该文件具有可以被系统执行的权限
需要注意的是:文件的权限并不能限制一个用户是否能删除这个文件,下面举个栗子(以文件为例,目录也是一样的,有兴趣的读者可以自行尝试):
# 先以root用户身份创建一个文件,并将权限设置为700,即只有root用户可以读写和执行这个文件, # 其他用户对这个文件没有读写权限 输入: echo "test" >> a.txt chmod 700 a.txt ls -l a.txt 输出: -rwx------ 1 root root 5 8月 15 13:32 a.txt # 再切换回普通用户状态,删除这个文件(可以发现虽然sunny对a.txt不具有权限, # 但是仍然可以成功删除该文件) sunny@DESKTOP-A80BM1L:~$ rm a.txt rm:是否删除有写保护的普通文件 'a.txt'? y sunny@DESKTOP-A80BM1L:~$ ls a.txt ls: 无法访问'a.txt': 没有那个文件或目录
-
目录的权限
- r(read contents in directory):表示你有读取该目录的结构列表的权限,即可以用ls命令将目录中的文件列表显示出来(前提是同时拥有x权限)
- w(modify contents of directory):表示拥有可以更改该目录结构列表的权限
- 新建文件或目录
- 删除已经存在的文件或目录
- 将已存在的文件或目录进行重命名
- 转移改目录内的文件、目录
- 其他可以使得该目录下某个或者某些文件的文件名发生变动的操作
- x(access directory):表示用户是否能进入该目录工作
需要注意的是:如果你对某个目录不具有x权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何命令,即便你具有该目录的r权限
上面对于是否可以删除一个文件的讨论,这边添加一个注意事项:那就是如果你对一个目录没有x权限,则无法删除该目录下的任何文件,也就意味着如果这个目录不为空,你无法成功删除这个目录
-
-
如何判断是否能删除一个文件
根据上面的讨论我们能发现,其实一个文件是否能被一个用户删除,取决于这个用户是否对该文件所在目录具有一定的权限:
- 若用户不具有目标文件所在目录的r权限:则用户无法获取目标文件所在目录的文件信息,也就无法删除目标文件 =>所以用户要能够删除目标文件,必须具有目标文件所在目录的 r 权限
- 若用户不具有目标文件所在目录的w权限:则用户无法对目标文件进行删除操作(对于目标文件所在目录下的其他文件同样无法删除),也就无法删除目标文件 => 所以用户要能够删除目标文件,必须具有目标文件所在目录的 w 权限
- 若用户不具有目标文件所在目录的x权限:则用户无法进入目标文件所在目录,也就无法访问到目标文件,不能删除目标文件 => 所以用户要能够删除目标文件,必须具有目标文件所在目录的 x 权限
综上所述,要想删除一个目标文件,必须拥有目标文件所在文件夹的 rwx 权限