amandakelake/blog

Linux 文件权限

amandakelake opened this issue · 0 comments

一、使用者与群组

Linux是个多人多任务的系统,经常会有多个人同时使用这部主机来进行工作的情况,所以需要给每个人一个使用者身份(用户),身份直接跟文件权限关联

在Linux里面,文件的权限跟使用者身份有关,关于使用者有3个概念

* 文件拥有者
* 群组
* 其他人(非本群组成员)

这三个概念很好理解,初中数学就够用了
9A5DB615-45E9-4D47-AF8A-6F02E399AA90

关于群组,用的最多的应该是在团队开发资源的情况下,不同团队之间的资源权限分配

二、Linux文件权限

文件权限,我们先来看一条命令ll
C709BEC1-AEF6-43C0-BB5B-29F6A6B347F9

我们直接看第一列,是个10位的东西,是关于文件权限的,让我们来拆一下,分为四部分
F18849AD-B691-41B5-9DCD-127DD662EB32

先看第一部分,档案类型,认得d-基本就够了
* d 目录
* - 文件
* l 连接档(link file)
* b 装置文件里面的可供储存的接口设备(可随机存取装置)
* c 装置文件里面的串行端口设备,例如键盘、鼠标

后面三部分类似,分部代表不同使用者的权限,我们把几个字母拆开来看
* r 可读,read
* w 可写, write
* x 可执行, execute
* 如果是目录,一定要有该权限才能进入,否则有了r也只能查询,不能cd进入
* 跟文件后缀名是否可执行没有任何关系,跟window下的后缀不一样
- 代表无该权限

然后我们设置或者更改权限的时候,会按照二进制转八进制的读法,还是按照上面的例子,我们只读后面三部分
A0D5700F-84AB-4477-9129-296C1FD1E1C0

如果该位是-,填二进制的0,有字母就是1
每隔3位读一个数字,从二进制转8进制
111 -> 7
101 -> 5
所以,上面这个例子的权限就是755

再简单一点,读4,写2,执行1,需要什么权限就加起来得到权限数字
三类用户*三类权限 = 9种基本权限

让俺再造一个例子来加深理解

-rw-r--r-- [连接数] root  root   [容量] [时间] file1
-rwxr-xr-- [连接数] user1 group1 [容量] [时间] file2
drwxr-xr-- [连接数] user2 group1 [容量] [时间] dir1
  • 文件file1的拥有者是root,所属群组是root,权限644
    • 只有root账号拥有读写权限,不可执行;其他组和其他人只有读的权限
  • 文件file2的拥有者是user1,所属群组是group1,权限754
    • user1可读可写可执行该文件
    • group1群组下的user2user3等用户,可读可执行,但不可写(不可修改)
    • group1群组下的,亦即其他人,只能读,不可写和执行
  • 目录dir1的拥有者是user2,所属群组是group1,权限754
    • user2可以在本目录进行任何操作
    • group1群组下的其他账号,可进入该目录,可读可执行,但不能写
    • 其他组的账号,虽然有r读权限,但是由于没有x执行权限,也就是无法进入该目录,只能简单查一下该目录下有啥

对于目录来说,最大权限是777
对于文件来说,最大权限是666 ,对所有用户读写权限全开

另外,在Linux系统中,root用户是神,拥有任何权限,所以一般人都不会以root目录来进行日常操作,避免误删一些系统文件等操作,严重会直接导致机器瘫痪

修改文件/目录权限与所属

* `chmod` 改变文件的权限
* `chown` 改变文件拥有者
* `chgrp` 改变文件所属群组

首先是chmod,我们直接看最常用的修改法

# 修改文件权限
# -R可选 递归 该目录下所有的文件/目录都一起更改
chmod [-R] [权限数字] [文件/目录]

# 修改文件拥有者
# 用户必须是已经存在系统中的账号 存在/etc/passwd中
chown [-R] [账号:组名] [目录/文件]

# 修改所属群组
# 群组必须是已经存在系统中的群组 存在/etc/group
chgrp [-R] [新的群组] [目录/文件]