Linux 文件权限进阶与进程管理
2026/9/12 20:51:01 网站建设 项目流程

Linux 文件权限进阶与进程管理

核心内容:umask 默认权限掩码 | 特殊权限 SUID/SGID/Sticky | 文件扩展属性 | 进程基础与状态 | 进程查看与作业控制 | 进程信号 | 僵尸/孤儿进程


文章目录

  • Linux 文件权限进阶与进程管理
    • 一、文件默认权限:umask 掩码
      • 1. 核心作用
      • 2. 计算示例
      • 3. 常用操作
    • 二、文件特殊权限(SUID / SGID / Sticky)
      • 核心对照表
      • 1. SUID 详解
      • 2. SGID 详解
      • 3. Sticky 粘滞位详解
      • 4. 设置与查找
    • 三、文件扩展属性:chattr
      • 1. 两个核心属性
      • 2. 常用操作
    • 四、进程基础概念
      • 1. 核心定义
      • 2. 进程的组成
      • 3. 进程的产生:fork 机制
    • 五、进程状态
      • 状态对照表
      • 状态转换流程
    • 六、进程查看命令:ps
      • 1. 常用组合
      • 2. 筛选进程
      • 3. 关键字段说明
    • 七、前后台进程与作业控制
      • 1. 前台 vs 后台
      • 2. 作业控制命令
      • 3. 脱离终端运行
        • (1)nohup
        • (2)screen
    • 八、进程信号
      • 常用核心信号
      • 信号发送命令
        • (1)kill
        • (2)pkill / pgrep
    • 九、特殊进程:僵尸进程与孤儿进程
      • 1. 僵尸进程
        • 产生原因
        • 解决方法
      • 2. 孤儿进程
        • 产生原因
      • 对比总结

一、文件默认权限:umask 掩码

1. 核心作用

umask 是新建文件/目录时要剔除的权限,用来控制系统默认创建文件的权限。

  • 目录默认最大权限:777 (rwxrwxrwx)
  • 文件默认最大权限:666 (rw-rw-rw-)(文件默认不赋予执行权限,出于安全考虑)
  • 最终权限 = 最大默认权限 - umask 掩码权限

2. 计算示例

系统默认 umask 为0022

  • 新建目录:777 - 022 = 755 →drwxr-xr-x
  • 新建文件:666 - 022 = 644 →-rw-r--r--

3. 常用操作

# 查看当前umask值umask# 临时设置(当前终端生效)umask077# 新建文件仅用户自己可读写,组和其他无任何权限# 永久生效# 单个用户:写入 ~/.bashrcecho'umask 077'>>~/.bashrc# 所有用户:写入 /etc/bashrcecho'umask 077'>>/etc/bashrc

二、文件特殊权限(SUID / SGID / Sticky)

基础 rwx 之外的三种特殊权限,用于实现特定的权限功能,对应位置在权限位的最前面。

核心对照表

特殊权限对文件的影响对目录的影响典型示例数字值
SUID(u+s)执行可执行文件时,以文件所有者的身份运行,而非执行者身份无影响/usr/bin/passwd(普通用户修改密码时临时获得root权限)4
SGID(g+s)执行可执行文件时,以文件所属组的身份运行目录内新建的文件/子目录,自动继承该目录的组所有者/run/log/journal(日志目录,保证日志文件统一归属日志组)2
Sticky(o+t)无影响对目录有写权限的用户,只能删除自己拥有的文件,无法删除他人文件/tmp(公共临时目录,防止用户随意删除他人文件)1

1. SUID 详解

  • 仅对可执行的二进制文件有效,对脚本、目录无效。
  • 权限位表现:用户执行位的x变成s,如-rwsr-xr-x
  • 风险:如果给 vim、bash 等工具加 SUID,普通用户可以直接获得 root 权限,属于高危操作。

2. SGID 详解

  • 对目录:是团队协作的常用手段,确保同组用户在目录下创建的文件都属于同一个组,方便共享。
  • 权限位表现:组执行位的x变成s,如drwxrwsr-x

3. Sticky 粘滞位详解

  • 仅对目录生效,是公共目录的安全机制。
  • 权限位表现:其他用户执行位的x变成t,如drwxrwxrwt

4. 设置与查找

# 添加SUIDchmodu+s /usr/bin/vim# 添加SGIDchmodg+s /data/webapp# 添加Stickychmodo+t /tmp# 数字方式设置(4=SUID 2=SGID 1=Sticky,放在三位权限前)chmod4755file# SUID + 755chmod2775dir# SGID + 775chmod1777tmpdir# Sticky + 777# 查找系统中所有带SUID的文件find/-perm-4000

三、文件扩展属性:chattr

比基础权限更底层的文件属性,root 用户也受约束,用于保护关键文件不被修改/删除。

1. 两个核心属性

属性作用适用场景
i(immutable)不可变更:文件不能修改、删除、重命名,不能追加内容保护系统关键配置文件,防止误改误删
a(append only)仅追加:只能在文件末尾追加内容,不能覆盖、删除日志文件,保证日志只能新增不能篡改

2. 常用操作

# 添加i属性(锁定文件)chattr +i /etc/passwd.bak# 移除i属性chattr-i/etc/passwd.bak# 添加a属性chattr +a /var/log/operator.log# 查看文件扩展属性lsattr /etc/passwd.bak

注意:扩展属性高于常规权限,即使是 root 用户,给文件加了i属性后也无法修改删除,必须先移除属性。


四、进程基础概念

1. 核心定义

  • 程序:静态的可执行文件,存储在磁盘上。
  • 进程:运行起来的程序,是程序的运行实例,占用 CPU、内存等系统资源。
  • 线程:进程内的执行单元,一个进程可以有多个线程。

2. 进程的组成

  • 独立的内存地址空间
  • 安全属性(所有者、权限)
  • 一个或多个执行线程
  • 进程状态
  • 环境变量、文件描述符等资源

3. 进程的产生:fork 机制

Linux 中所有进程都是通过fork复制创建的:

  1. 父进程调用 fork,复制出一个子进程
  2. 子进程通过exec加载新的程序代码运行
  3. 子进程退出时,向父进程发送信号,由父进程回收状态

系统中所有进程的祖先是 PID=1 的systemd进程(CentOS7+)。


五、进程状态

Linux 进程有多种状态,在不同条件间转换,核心状态如下:

状态对照表

状态标识状态名称内核定义说明
R运行/就绪态TASK_RUNNING正在CPU上执行,或在就绪队列等待调度
S可中断睡眠TASK_INTERRUPTIBLE等待事件/资源,收到信号可以唤醒
D不可中断睡眠TASK_UNINTERRUPTIBLE等待硬件IO,不响应信号,保证IO过程不被打断
T停止态TASK_STOPPED被暂停,收到CONT信号可恢复
Z僵尸态EXIT_ZOMB子进程已退出,但父进程未回收其退出状态,仅保留PID等信息
X销毁态EXIT_DEAD父进程回收完成,进程彻底释放,系统中不可见

状态转换流程

新建 → 就绪(R) ←→ 运行(R) → 退出 → 僵尸(Z) → 回收(X) ↑ ↓ 睡眠(S/D/T)
  • 运行中的进程调用系统调用、等待资源时,进入睡眠状态
  • 睡眠的进程等待的事件到达时,回到就绪态
  • 收到停止信号进入T状态,收到继续信号恢复

六、进程查看命令:ps

ps 是查看系统进程信息的核心命令,支持多种筛选和输出格式。

1. 常用组合

# 查看所有进程(简略)ps-e# 查看所有进程(详细信息,UID/PID/PPID/启动时间)ps-ef# 查看所有进程(BSD风格,含CPU/内存占用)psaux# 树形显示进程父子关系psaxf# 自定义输出列ps-opid,%cpu,%mem,command

2. 筛选进程

# 查看指定用户的进程ps-uhero# 查看指定终端的进程ps-tpts/0# 按名称筛选ps-Cnginx# 按CPU使用率降序排序psaux--sort-%cpu

3. 关键字段说明

  • PID:进程ID,唯一标识
  • PPID:父进程ID
  • %CPU:CPU使用率
  • %MEM:内存使用率
  • TTY:进程所属终端,?表示后台守护进程
  • STAT:进程状态
  • TIME:进程累计占用CPU的时间
  • COMMAND:进程名称

七、前后台进程与作业控制

1. 前台 vs 后台

类型特点
前台进程占用终端,可接收键盘输入,一个终端同一时间只有一个前台进程
后台进程不占用终端,无法接收键盘输入,在后台静默运行

2. 作业控制命令

# 后台启动sleep进程300秒,启动了一个专门用来休眠300秒的进程sleep300&# 查看当前终端的后台作业jobs# 暂停前台进程(Ctrl+Z)# 把正在运行的前台进程暂停,放到后台停止状态# 将作业切到前台运行fg%1# %1 是jobs里的作业编号# 将暂停的作业放到后台继续运行bg%2

3. 脱离终端运行

终端关闭时,后台进程会收到HUP信号终止,需要工具让进程脱离终端:

(1)nohup

让进程忽略终端挂起信号,终端关闭后继续运行:

nohup./study.sh&
(2)screen

虚拟终端工具,创建独立的终端会话,关闭真实终端不影响:

# 新建screen会话screen# 列出所有screen会话screen-ls# 重新连接会话screen-r会话ID# 退出并关闭会话exit

八、进程信号

信号是发给进程的软中断,用来通知进程发生了特定事件,进程可以响应、忽略或被强制终止。

常用核心信号

编号名称含义触发方式特点
1HUP挂起/重载终端关闭、手动发送通常用于让服务重新加载配置,不终止进程
2INT中断Ctrl+C终止前台进程,可被拦截
3QUIT退出Ctrl+\终止进程并生成转储文件
9KILL强制杀死手动发送不可拦截、不可忽略,必定终止进程
15TERM终止kill默认信号友好终止,允许进程清理资源后退出,可拦截
18CONT继续手动发送恢复暂停的进程,不可拦截
19STOP停止手动发送强制暂停,不可拦截
20TSTP终端停止Ctrl+Z暂停前台进程,可拦截

信号发送命令

(1)kill

按 PID 或作业号给单个进程发信号:

# 默认发15号TERM信号,终止进程kill1234# 指定信号kill-91234# 强制杀死kill-STOP%1# 暂停作业1kill-CONT%1# 恢复作业1
(2)pkill / pgrep

按进程名、用户、终端批量操作:

# 按名称查找进程PIDpgrepsleep# 按名称批量终止进程pkillsleep# 终止指定用户的所有进程pkill-ulaoma# 终止指定终端的所有进程pkill-tpts/0

九、特殊进程:僵尸进程与孤儿进程

1. 僵尸进程

产生原因

子进程执行完毕退出后,父进程没有调用 wait 回收其退出状态,子进程就会进入 Z 状态,成为僵尸进程。

  • 僵尸进程已经释放了内存、文件等资源,只保留 PID、退出状态等少量信息。
  • 大量僵尸进程会占用 PID 号,导致系统无法创建新进程。
解决方法
  • 找到并终止父进程,僵尸进程会被 systemd 领养回收
  • 修复父进程代码,添加 wait 逻辑回收子进程

2. 孤儿进程

产生原因

父进程先退出,子进程还在运行,子进程就成为孤儿进程。

  • 孤儿进程会被 PID=1 的 systemd 进程领养,由 systemd 负责回收其退出状态。
  • 孤儿进程本身没有危害,只是父进程变成了1号进程。

对比总结

类型产生原因状态危害处理方式
僵尸进程子进程先退,父进程不回收Z状态占用PID,大量存在影响系统终止父进程,或修复父进程回收逻辑
孤儿进程父进程先退,子进程存活正常运行无直接危害无需特殊处理,由systemd托管

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询