这段时间在工作中需要完成一个作业提交与调度系统。在使用Slurm开源框架时总是会出现各个文件的权限问题,故准备在这个地方好好整理一下权限的设置。
查看文件(目录)的权限
想要查看文件权限的话,可以使用ls -ld <目录名>
来查看目标目录的权限信息。使用ls -l
可以在当前路径下查看里面所有信息的权限(包括文件和路径,但不包括子路径里面的文件)。
下面是一个简单的权限显示信息:
drwxr-xr-x 8 Kaster staff 256 5 8 2024 assets
-rw-r--r-- 1 Kaster group 1234 5 8 2024 filename
最左边的参数代表的是文件类型和权限。第一个字符代表文件类型。常用的是: -
普通文件, d
目录, l
符号链接。以第一行的目录为例:
- 第一列的九个字符:表示文件的权限,分为三组,分别对应文件所有者(user)、所属组(group)和其他用户(others)。每组三个字符,分别表示读(
r
)、写(w
)和执行(x
)权限。 如果没有相应的权限,则用-
表示。比如,drwxr-xr-x
- 第二列的数字表示的是硬链接的数量。
- 第三列和第四列的 Kaster staff代表文件所有者和所属的组。
- 第五列的256是asset的目录大小。
- 第六到八列代表的是目录最后修改时间,会根据格式不同显示不同的形式。
- 最后一列则是目录的名称
修改文件(目录)的权限
chmod可以给文件和目录修改权限。下面是常用的几种选项
- -R 递归地修改目录及其子目录和文件的权限。
- -v 显示详细的输出,列出每个被修改权限的文件。
- -c 只在权限被实际修改时才显示输出。
当后面需要修改权限时,chmod提供了两种模式
符号模式,用字符表示用户类别、操作符和权限类型
- 用户类别
u
: user (所有者) - 文件/目录的所有者。g
: group (所属组) - 文件/目录所属的用户组。o
: others (其他用户) - 既不是所有者,也不是所属组成员的其他用户。a
: all (所有用户) - 代表u
、g
和o
的总和。
- 操作符
+
: 添加权限 - 在现有权限的基础上添加新的权限。-
: 移除权限 - 从现有权限中移除指定的权限。=
: 设置权限 - 将权限设置为指定的值,覆盖原有的权限。
- 权限类型
r
: read (读取) - 允许读取文件内容或列出目录内容。w
: write (写入) - 允许修改文件内容或在目录中创建/删除文件。x
: execute (执行) - 允许执行文件 (如果是程序) 或进入目录 (如果是目录)。X
: execute only if directory or already executable (特殊执行权限) - 只对目录或已经是可执行的文件添加执行权限。这在批量修改权限时非常有用,避免误将文本文件等设置为可执行。s
: setuid 或 setgid (特殊权限) - 设置用户ID或组ID。t
: sticky bit (特殊权限) - 粘滞位。l
: lock (特殊权限, 较少用) - 锁。
比如
chmod u+x filename.txt
就是给filename.txt的所有者添加执行权限。- 用户类别
数字模式,使用三个八进制数字来表示所有者、所属组和其他用户的权限。每个数字都是 0-7 的值,代表
rwx
权限的组合。- 八进制数字的含义
- 第一个数字: 代表 所有者 (user) 的权限。
- 第二个数字: 代表 所属组 (group) 的权限。
- 第三个数字: 代表 其他用户 (others) 的权限。
- 每个数字的构成
r
(read): 对应数字4w
(write): 对应数字2x
(execute): 对应数字1
- 计算八进制数字: 将需要的权限对应的数字相加。
rwx
(读、写、执行) = 4 + 2 + 1 = 7rw-
(读、写,无执行) = 4 + 2 + 0 = 6r--
(只读,无写和执行) = 4 + 0 + 0 = 4--x
(无读和写,只有执行) = 0 + 0 + 1 = 1---
(无任何权限) = 0 + 0 + 0 = 0
- 此外,还会有第四位数字作为特殊权限使用,一般用不上
4
: setuid (SUID) - 设置用户ID。当可执行文件设置了 SUID 位后,其他用户执行该文件时,会暂时拥有文件所有者的权限来执行。2
: setgid (SGID) - 设置组ID。对于文件: 类似于 SUID,执行时暂时拥有文件所属组的权限。对于目录: 在目录下创建的新文件或子目录会继承该目录的组ID,而不是创建者的默认组ID。1
: sticky bit (粘滞位) - 主要用于目录。当目录设置了粘滞位后,只有文件所有者、目录所有者或 root 用户才能删除或重命名目录内的文件。
- 八进制数字的含义
更改文件(目录)的所有者
chown
(change owner)命令可以更改文件(目录)的所有者和所属的组,一般来说直接更改当前文件或者-R
递归更改当前的目录。
然后就可以在以 用户名:组名
的形式对文件(目录)进行更改。
例如: sudo chmod root:root filename.txt
就是将filename.txt的所有者更改为root用户和root组。
Comments