(二)文件管理-文件权限-umask命令的使用
在现代 Linux 系统上,如果文件系统使用了 ACL(访问控制列表),umask 的行为可能会被覆盖。系统管理员可以配置默认的 ACL 规则,这些规则会优先于传统的 umask 设置来决定新文件的权限。,它只影响当前 shell 及其后续启动的进程(子进程会继承这个 umask 值)。在自动化脚本中,如果你需要以非常严格的权限创建文件,可以在脚本开始时临时修改 umask,执行完操作后再恢复。它
文章目录
1. 命令格式
umask 命令的格式非常简洁:
umask [-p] [-S] [mode]
-
mode (可选参数): 指定要设置的新权限掩码(umask值)。它可以有两种形式:数字模式 (Octal mode): 由 3 或 4 位八进制数字组成(例如0022,022,0002)。符号模式 (Symbolic mode): 类似于chmod命令的符号格式(例如u=rx,g=rx,o=)。
-
-S (选项): 以符号形式显示当前的umask值,而不是数字形式。这是一个非常有用的选项,使输出更易读。 -
-p (选项): 以可重用的格式输出。如果与mode参数一起使用,输出的形式可以直接作为命令再次执行。通常与-S一起使用。
如果不带任何参数和选项,umask 命令会以数字模式显示当前的权限掩码。
2. 基本用法
umask 的主要作用是设置用户创建新文件或目录时的默认权限。它通过“屏蔽”(mask)掉不希望赋予的权限位来实现。
2.1 核心规则
- 文件的默认最大权限是
666(即rw-rw-rw-)。 - 目录的默认最大权限是
777(即drwxrwxrwx)。 - 实际的默认权限 = 最大权限 减去 umask 值。
2.2 查看当前 umask
$ umask
0022
# 或者使用更易读的方式
$ umask -S
u=rwx, g=rx, o=rx
2.3 设置新的 umask
$ umask 002
# 再次查看
$ umask
0002
$ umask -Su=rwx, g=rwx, o=rx
3. 高级用法
3.1 在 Shell 配置文件中永久设置
直接在终端中设置的 umask 只在当前会话有效。要永久生效,需要将 umask 命令写入用户的 shell 配置文件中(如 ~/.bashrc, ~/.bash_profile, 或 ~/.zshrc)。
- 编辑配置文件
nano ~/.bashrc
- 在文件末尾添加一行
umask 002 # 或者你偏好的值,例如 022
- 保存文件,然后运行
source命令使其立即生效,或重新打开终端
source ~/.bashrc
3.2 处理特殊权限位
umask 值通常有 3 位(如 022),但也可以有 4 位(如 0022)。第一位用于设置特殊权限的掩码。
- 4 (SetUID):设置用户ID
- 2 (SetGID): 设置组ID
- 1 (Sticky Bit): 粘滞位
例如,如果你想在设置 umask 的同时,确保新创建的文件不会继承 SetUID 位,你可以使用 4 位 umask:
$ umask 0022
# 与 022 效果相同,第一位 0 表示不屏蔽任何特殊权限
3.3 在脚本中临时修改 umask
在自动化脚本中,如果你需要以非常严格的权限创建文件,可以在脚本开始时临时修改 umask,执行完操作后再恢复。
#!/bin/bash
# 保存旧的 umask
OLD_UMASK=$(umask)
# 设置一个非常严格的 umask (阻止组和其他用户的所有访问)
umask 077
# 执行文件创建操作
touch super_secret_file.txt
mkdir private_dir
# 操作完成后,恢复旧的 umaskumask
$OLD_UMASK
echo "Done. Old umask restored."
4. 注意事项
4.1 umask 是掩码,不是权限
它是一个“要屏蔽掉的权限”的集合,而不是“要赋予的权限”。计算最终权限时用的是“减法”逻辑。
4.2 文件与目录的差异
因为文件的原始权限是 666,而 umask 022 会屏蔽掉 w 权限(对于组和其他用户),所以最终文件权限是 644 (rw-r--r--)。目录的原始权限是 777,减去 022 后是 755 (rwxr-xr-x)。
4.3 文件默认无执行权限
出于安全考虑,系统绝不会给新创建的文件默认赋予执行 (x) 权限。即使用 umask 000 创建文件,其权限也是 666,而不是 777。
4.4 作用范围
umask 命令是 shell 内建命令,它只影响当前 shell 及其后续启动的进程(子进程会继承这个 umask 值)。修改它不会影响其他已经运行的 shell 或进程。
4.5 umask 与 ACLs
在现代 Linux 系统上,如果文件系统使用了 ACL(访问控制列表),umask 的行为可能会被覆盖。系统管理员可以配置默认的 ACL 规则,这些规则会优先于传统的 umask 设置来决定新文件的权限。如果你的 umask 设置似乎没有生效,检查一下目录是否设置了默认 ACL (getfacl <directory-name>)。
更多推荐



所有评论(0)