1. 认识文件权限从 ls -l 说起在 Linux 中一切皆文件。要理解权限系统最好的起点是ls -l命令的输出。它用一行紧凑的字符串同时告诉我们文件类型、访问权限、属主、属组和大小等信息。-rw-r--r-- 1 user group 1024 Jan 1 10:00 file.txt这一行输出可以拆解为几个部分第一位文件类型标识符- 表示普通文件。接下来九位访问权限分为三组每组三位分别对应属主、属组、其他用户。user group文件的属主和属组。1024文件大小字节。Jan 1 10:00最后修改时间。file.txt文件名。1.1 常见文件类型标识符ls -l 输出的第一个字符用于标识文件类型常见的有-普通文件d目录l符号链接c字符设备文件b块设备文件p管道文件s套接字文件1.2 权限字段解析接下来九位权限字符分为三组每组三位顺序固定为读r、写w、执行x第一组rw-属主权限本例为读、写、无执行。第二组r--属组权限本例为读、无写、无执行。第三组r--其他用户权限本例为读、无写、无执行。权限位缺失时用 - 占位。理解了这一行输出就掌握了阅读任何文件权限信息的基础能力。2. 权限值表示方法从符号到数字符号表示法直观但书写冗长。Linux 提供了更紧凑的数字表示法把每组权限换算成八进制数字。每位由三个二进制位组成分别代表读、写、执行权限对应数值如下读权限r 4写权限w 2执行权限x 1把同一组内的数值相加就得到该组权限的数字。例如rwx 4 2 1 7rw- 4 2 6r-- 4--- 0于是三位数字分别对应属主、属组、其他用户的权限。例如755属主有读、写、执行权限7属组和其他用户有读和执行权限5。644属主有读写权限6属组和其他用户仅有读权限4。数字表示法简洁高效是日常使用最频繁的权限写法。3. 权限检查逻辑系统如何判定访问权当用户访问一个文件时系统按以下顺序判定其权限属主优先user -u若用户是文件属主直接使用属主权限不再向下匹配。属组匹配group -g若用户属于文件属组使用属组权限。其他用户other -o否则使用其他用户权限。需要特别注意的是执行权限是文件能否作为程序运行的前提。只有具备执行权限的文件才能被当作程序执行这与读、写权限相互独立。4. 修改权限chmod 命令chmod 命令用于修改文件或目录的权限支持数字模式和符号模式两种写法。4.1 数字模式chmod 755 filename设置文件权限为属主可读写执行属组和其他用户可读执行。4.2 符号模式符号模式通过字母和运算符组合表达权限变更更灵活适合只调整部分权限的场景。chmod urwx,grx,o-r filename其中u属主g属组o其他用户a所有用户添加权限-移除权限设定精确权限示例chmod a-w file.txt # 移除所有用户的写权限 chmod gw dir/ # 给属组添加写权限5. 更改属主与属组chown 和 chgrp权限的归属由属主和属组决定因此修改归属也是权限管理的重要环节。5.1 chgrp更改所属组chgrp 命令用于更改文件或目录的所属组。chgrp newgroup filename将文件 filename 的组所有权更改为 newgroup。支持递归操作chgrp -R newgroup /path/to/directory递归更改目录及其子项的组。5.2 chown更改属主和属组chown 命令用于更改文件或目录的属主和属组比 chgrp 更强大。chown owner filename仅更改属主。chown owner:group filename同时更改属主和属组。chown user:group file1 file2同时更改多个文件。chown -R user:group /path/to/directory递归更改目录及其子项的属主和属组。6. 默认权限控制umask 详解每次新建文件或目录时系统都会赋予一个默认权限。umask 就是控制这个默认权限的掩码它决定了系统在创建文件或目录时自动屏蔽掉哪些权限位。理解 umask 的关键在于它并不是直接设置权限而是从默认权限中减去某些权限。6.1 默认权限基准新建文件默认权限为 666即 rw-rw-rw-无执行权限新建目录默认权限为 777即 rwxrwxrwx含执行权限文件默认不含执行权限是为了防止误创建可执行文件目录需要执行权限才能进入因此默认包含。6.2 计算规则实际权限 默认权限 - umask 值。umask 中的每一位分别对应属主、属组、其他用户数值含义与 chmod 一致读r 4写w 2执行x 1。从位运算的角度看这个「减去」本质上是按位取反后再与默认权限做按位与实际权限 默认权限 ~umask。例如 umask 022 的二进制为 000 010 010取反后为 111 101 101与默认文件权限666110 110 110按位与得到 110 100 100即 644。这与「666 - 022 644」的结果一致但按位与的表述更贴近系统底层的真实实现。例如umask 022新建文件权限666 - 022 644属主可读写属组和其他用户只读新建目录权限777 - 022 755属主可读写执行属组和其他用户可读执行再举一个例子umask 077新建文件权限666 - 077 600仅属主可读写属组和其他用户无任何权限新建目录权限777 - 077 700仅属主可读写执行属组和其他用户无任何权限6.3 查看当前掩码umask直接输入 umask 命令即可查看当前会话的掩码值通常输出为 0022 或 022 格式。6.4 临时设置与永久设置在终端中直接执行 umask 命令只对当前会话生效关闭终端后失效。若需永久生效可将设置写入配置文件echo umask 022 ~/.bashrc source ~/.bashrc常见的配置文件包括 /etc/profile全局生效、~/.bashrc当前用户 Bash 生效、~/.profile 等。修改 /etc/profile 需要 root 权限建议优先在用户级配置文件中设置。6.5 常见 umask 值对照umask 值新建文件权限新建目录权限适用场景022644755常见默认值属组和其他用户可读002664775团队协作属组可读写077600700高安全仅属主可访问027640750属组可读写其他用户无权限7. 特殊权限位setuid、setgid 与 sticky bit除了常规的读、写、执行权限Linux 还提供三种特殊权限位用于更精细的权限控制。setuidS以属主身份执行。设置了 setuid 的可执行文件运行时以文件属主的身份运行而非执行者身份。典型例子是 passwd 命令普通用户通过它修改密码时能以 root 身份写入 /etc/shadow。setgidS以属组身份执行。对可执行文件运行时以文件属组的身份运行对目录新建的文件会自动继承该目录的属组常用于团队共享目录。sticky bitt粘滞位仅属主可删除。设置了 sticky bit 的目录只有文件属主、目录属主或 root 才能删除其中的文件常见于 /tmp 目录。设置方式chmod us file # 设置 setuid chmod gs dir # 设置 setgid chmod t dir # 设置 sticky bit8. 识别文件类型file 命令在操作文件之前先确认它的真实类型往往能避免很多错误。file 命令通过读取文件内容特征来识别类型不依赖扩展名。file filename输出文件的实际类型如example.txt: ASCII text image.jpg: JPEG image data, JFIF standard 1.01 script.sh: Bourne-Again shell script, ASCII text executable可用于判断是否为可执行文件、压缩包、符号链接等。9. 提权执行sudo 命令日常操作中普通用户权限往往不够。sudo 命令允许授权用户以超级用户或其他用户身份执行命令。sudo command需要输入当前用户的密码前提是用户在 sudoers 列表中。示例sudo apt update sudo systemctl restart apache2编辑 sudo 权限配置sudo visudo在配置文件中添加规则如username ALL(ALL) ALL允许用户执行任意命令。10. 系统关机shutdown 命令shutdown 命令用于安全关闭系统它会先通知所有登录用户再执行关机流程。立即关机shutdown now延迟关机如 10 分钟后shutdown -h 10指定时间关机shutdown -h 18:30取消已安排的关机shutdown -c发送通知信息shutdown -h 10 System maintenance in progress完成当前任务后关机shutdown -h now或shutdown now在任务执行完毕后立即关机若需延时可写成shutdown -h 55 分钟后关机。需要说明的是shutdown -h now与shutdown now在多数发行版中等价都会立即执行关机流程而shutdown -h 5表示延迟 5 分钟后关机适合在脚本中先完成清理任务再关机。若希望关机前先执行其他命令可写成command shutdown -h now确保任务成功后才关机。11. 总结本文从 ls -l 输出出发依次讲解了文件类型识别、权限字段解析、数字与符号权限表示、权限检查逻辑再到 chmod、chown、chgrp、umask、特殊权限位等核心操作最后补充了 file、sudo、shutdown 等实用命令。