Ubuntu教学系列(六):权限控制与系统管理

引言

在Ubuntu系统中,权限管理与进程服务管理是构建稳定、安全运行环境的两大基石,也是每一位系统管理员和开发者必须掌握的底层核心技能。权限体系作为Linux系统的“守门人”,通过用户、组、其他角色的三重权限划分,结合读(r)、写(w)、执行(x)的精细控制,既保障了多用户环境下的数据隔离性,也为潜在的安全威胁设置了动态屏障——从日常文件操作中 chmodchown 的权限微调,到 sudo 特权委派的风险权衡,每一个决策都可能影响系统的安全水位。而进程与服务管理则是系统资源的“调度中枢”,无论是通过 pstop 实时洞察进程的资源足迹,还是运用 systemctl 精准掌控服务的生命周期,亦或是借助 journalctl 在日志海洋中抽丝剥茧定位故障,这些工具链的熟练运用直接决定了运维响应效率与系统稳定性。本文将以实战为导向,深入解析权限模型的运作逻辑,拆解 chmod 数字模式与符号模式的本质差异;同时结合现代Ubuntu系统特性,演示如何通过 systemd 架构实现服务的精细化管控,并针对“僵尸进程吞噬资源”“服务启动权限陷阱”等典型场景提供解决方案,为各位观众老爷构建从权限基础到高阶管控、从进程观测到服务优化的完整知识图谱。

最后,如果大家喜欢我的创作风格,请大家多多关注up主,你们的支持就是我创作最大的动力!如果各位观众老爷觉得我哪些地方需要改进,请一定在评论区告诉我,马上改!在此感谢大家了。

各位观众老爷,本文通俗易懂,快速熟悉Ubuntu,收藏本文,关注up不迷路,后续将持续分享ubuntu纯干货(请观众老爷放心,绝对又干又通俗易懂)。请多多关注、收藏、评论,评论区等你~~~





正 文

Linux权限管理是系统安全的核心基石,通过用户User、组Group、其他Others 三类角色和读r、写w、执行x 三种权限,构建了细粒度的访问控制机制。理解权限模型的关键在于区分文件与目录权限的本质差异,并掌握 chmodchownchgrp 等核心命令的使用。本章从权限基础解析入手,深入探讨权限分配逻辑及操作实践,帮助开发者规避安全风险,实现高效、安全的资源管理。

一、 权限管理:从基础到高级控制

1.1 理解Linux权限模型

Linux的权限模型通过 用户 User Group其他 Others 三个角色,以及 r w执行 x 三种权限,实现对文件和目录的访问控制。

1.1.1 用户/组/其他三类角色

  1. 用户(User)
    • 文件或目录的所有者(创建者或当前拥有者)。
    • 权限通过 chown 命令修改。
  2. 组(Group)
    • 一组用户的集合,共享相同的权限。
    • 文件所属组通过 chgrpchown 修改。
  3. 其他(Others)
    • 除所有者和所属组外的所有用户。
    • 通常权限设置最严格,避免未授权访问。

1.1.2 读(r)、写(w)、执行(x)权限解析


(一)三种不同的权限对文件和目录的影响

权限对文件的影响对目录的影响
r读取文件内容(如 catless)。列出目录内容(如 ls ),但需配合 x 权限才能访问文件元数据。
w修改文件内容(如 vim )。增删目录内的文件或子目录(需配合 x 权限)。
x执行文件(如脚本或二进制程序)。进入目录( cd )或访问其子项(即使无 r 权限,但需知道文件名)。

(二)权限表示示例

权限三元组(以 ls -l 输出为例)

-rwxr-xr-- 1 user group 4096 Jan 10 10:00 script.sh

# 解释
-rwxr-xr--   (文件类型及用户/组/其他用户的权限组合)
1   (指向此文件的硬链接数量,普通文件默认是 1,目录的硬链接数等于子目录数 + 2)
user  (文件的所有者/拥有者账户名)
group (文件所属的用户组名)
4096  (文件内容的字节数(若为目录,表示目录元数据占用空间,而非实际内容大小))
Jan 10 10:00  (文件最后一次被修改的日期和时间)
script.sh     (文件名称)
  1. 字符含义
字符说明数值表述
-普通文件(如脚本、文本、二进制文件等)
rwx所有者 user 的权限(读、写、执行)7(4+2+1)
r-x所属组 group 成员的权限(读、执行)5(4+0+1)
r--非所有者和非组成员的权限(其他人)(读)4(4+0+0)
  1. 权限效果说明
权限对象允许的操作
所有者 user- 读取文件内容- 修改文件内容- 将文件作为程序执行(如运行脚本 ./script.sh)
组成员 group- 读取文件内容- 将文件作为程序执行(但无法修改文件内容)
其他用户- 仅可读取文件内容(不可修改或执行)

注释:r 读取(4) ,w 写入(2) ,x 执行(1)。

1.1.3 文件与目录的区别


(一)权限类型对比

权限类型文件目录
r(读)查看内容。列出子项名称(需 x 权限才能生效)。
w(写)修改内容。增删子项(必须同时有 x 权限)。
x(执行)运行程序。进入目录或访问子项元数据(如 stat 文件)。

(二)关键区别与示例

  1. 执行权限对目录的意义

    • x权限时:
      • 即使有 r 权限,无法执行ls查看详细内容。
      • 无法通过路径直接访问子文件(如 cat dir/file 会失败)。
    • x 权限但无 r 权限:
      • 无法列出子项,但已知文件名时可直接访问(如 cat dir/known_file )。
  2. 删除文件的权限依赖

    • 删除文件需要 目录的 wx 权限,与文件本身的权限无关。
    • 示例:若用户对目录有 rwx 权限,即使文件是只读的,用户仍可删除它。
  3. 权限组合示例

    • 目录权限 drwxr-xr--
      • 用户可读写执行;组用户可读和执行;其他用户仅可读(但无法进入目录,因缺少 x )。
    • 目录权限 dr-xr-x---
      • 用户和组可进入并访问已知文件;其他用户无权限。

注释:

  • 文件权限:控制内容操作(读/写/执行)。
  • 目录权限:控制结构操作(列出/进入/修改子项)。
  • 目录的x权限是核心:无x则大多数操作受限,即使有 rw
  • 合理分配权限需结合业务场景,遵循最小权限原则。

1.2 核心权限操作命令

1.2.1 chmod:修改文件权限


(一)基础概念

chmod 指令是一个用于修改文件或目录权限的核心命令,其全称为Change Mode。它通过调整权限位来控制用户对文件或目录的访问方式(如读、写、执行),从而实现访问权限的精细化管理。

(二)数字模式与符号模式

命令的基本语法指令:

chmod [数字模式] [对象]            # 数字模式
chmod [对象 ± = 修改类型] [对象]   # 符号模式
  1. 数字模式(推荐新手)

所谓的数字模式就是我们刚在注释所讲的内容,将“读”,“写”,“执行”以数字形式表达,非常方便。

chmod 755 script.sh    # rwxr-xr-x
chmod 644 config.txt   # rw-r--r--

常见权限组合:

数字模式表达使用场景
755user:rwx,group:r-x,其他用户:r-x可执行脚本/程序
600user:rw-,group:—,其他用户:—私有配置文件(仅所有者可读写)
  1. 符号模式(精准调整)

符号模式更加注重于对所有者/所属组/其他用户所拥有的权限进行精准调控,有点可视化的感觉,数字无法直观看出所增加/减少的权限类型。

chmod u+x backup.sh         # 给所有者添加执行权限
chmod g-w sensitive.txt     # 移除所属组的写入权限
chmod o=r-- public.txt      # 设置其他用户只读
chmod u+rwx,g=rx,o-r file.txt  # 所有者增加读写执行,组设为读执行,其他用户移除读权限
chmod -R u+rwx /var/www     # 递归设置目录及内部文件权限

注释: 在Ubuntu系统中,默认不启用root用户,普通用户需通过sudo临时提升权限来执行需要管理员操作的chmod命令。例如:

sudo chmod 644 /etc/nginx/nginx.conf   # 需输入当前用户密码验证

但是,这里本人还是推荐数字模式,我的感受是,虽然符号模式更精准,但该文件/目录原来到底有哪些权限我是需要查询的,然后才能修改。而使用数字模式则可以直接赋予我想有给它的权限范围,无需事先查询。

1.2.2 chown:变更文件所有者与组


(一)基础概念

chown 命令全称为 Change Owner,是一个用于修改文件或目录的所有者user及所属组group的核心命令,调整文件的属主和属组来控制不同用户或用户组的访问权限。只有root用户或有 sudo权限的普通用户才能执行此命令。Ubuntu默认禁用root直接登录,因此普通用户需通过sudo临时提权操作。

(二)基本语法与示例

命令的基本语法指令:

chown [选项] [所有者][:组] 文件/目录

常见使用示例

# 修改文件所有者
sudo chown new_owner filename   # 将文件所有者改为new_owner
sudo chown alice file.txt       # 将file.txt的所有者设为alice
 
# 同时修改所有者和组
sudo chown alice:developers file.txt  # 所有者设为alice,组设为developers

# 仅修改所属组
sudo chown :developers file.txt       # 仅修改组为developers(所有者不变)

# 递归修改目录及子内容
sudo chown -R alice:developers project/  # 递归修改project目录及所有子文件/目录

# 参考其他文件权限
sudo chown --reference=source.txt target.txt  # 将target.txt的属主/组设为与source.txt相同

1.2.3 chgrp:单独修改文件所属组


(一)基础概念

chgrp 命令全称为 Change Group,是一个专门用于修改文件或目录的所属组的核心命令。通过调整文件的属组,可以控制不同用户组的访问权限。与 chown :组 的操作等价,但 chgrp 语法更直观。同样需要 root 权限或通过 sudo 提权执行。

(二)基本语法与示例

命令的基本语法指令:

chgrp [选项] 新组名 文件/目录

常见使用示例

# 修改文件的所属组
sudo chgrp developers file.txt      # 将file.txt的所属组设为developers

# 递归修改目录及子内容的所属组
sudo chgrp -R developers project/   # 递归修改project目录及所有子文件/目录的组

# 参考其他文件的组设置
sudo chgrp --reference=source.txt target.txt  # 将target.txt的组设为与source.txt相同

# 修改多个文件的组(支持通配符)
sudo chgrp staff *.log              # 将所有.log文件的组设为staff

# 修改符号链接指向的文件组(默认不跟随符号链接)
sudo chgrp -h devteam symlink_file  # 修改符号链接自身的组(而非其指向的文件)

(三)注意事项

  1. 权限要求

    • 用户必须属于目标组或拥有 root/sudo 权限,否则会报错 Operation not permitted
  2. 递归操作的风险

    • -R 选项会递归修改目录内所有子项,可能导致意外覆盖权限,建议提前备份或确认路径。
  3. 组的有效性

    • 目标组必须在系统中存在(通过 /etc/group 文件定义),否则会报错 invalid group
  4. 符号链接处理

    • 默认操作符号链接时,chgrp 修改的是符号链接文件本身的组(而非指向的文件)。若需修改目标文件的组,需用 -L 选项(跟随符号链接)。

(四)chgrpchown 的等效操作

# 以下两条命令完全等效
sudo chgrp developers file.txt
sudo chown :developers file.txt

1.3 权限的提升与委派

sudosu 可以提升用户的权限,慎重使用权限!

Ubuntu推荐通过sudo提权而非切换到root用户,以增强安全性。

(一)临时获取root权限

sudo apt update  # 单条命令提权
sudo -i          # 切换到root shell(需谨慎)

(二)切换用户

su - username    # 完全切换用户环境
exit             # 返回原用户

1.4 章尾总结

  1. 权限模型核心
    • 用户、组、其他三类角色与 rwx 权限共同构成访问控制的最小单元,文件与目录的权限行为差异显著(如目录需 x 权限方可进入)。
  2. 核心命令
    • chmod:通过符号模式(u/g/o±rwx)或数字模式(如755)灵活调整权限。
    • chown:变更文件所有者与组,支持递归操作(-R)。
    • chgrp:专用于调整所属组,等价于 chown :组 但更直观。
  3. 安全实践
    • 遵循最小权限原则,避免滥用 777-R 递归操作。
    • **慎用 sudosu **:优先使用 sudo 执行单条特权命令,减少直接切换 root 的风险。
  4. 场景化应用
    • 脚本需 +x 执行权限,敏感文件建议 600,共享目录权限常设为 770 并绑定组所有权。

权限即责任,谨慎方得安全。

二、 进程与服务管理

这一小节的工作内容主要体现在查找程序报错方面,尤其是查看工作日志!下面的一些操作,各位老铁千万别随意试着玩,尤其是kill进程,可能会导致很麻烦的结果。答应我,别乱搞,除非你清楚你的操作并不影响将来的程序运行!

2.1 进程的查看与监控

2.1.1 ps:静态查看进程状态


(一)基础概念

ps 命令全称为Process Status,是一个用于查看当前系统进程状态的核心命令,能够提供进程的详细信息,如PID(进程ID)、资源占用、执行命令等,是系统管理和故障排查的重要工具。

(二)基础指令与示例

命令的基本语法指令:

ps [选项]

这个地方指令比较多,也不是很好记,我就给大家举几个经常用得上的ps指令,如果出现需要其他指令的时候,再进行检索即可,记住基本的操作就够用了。

常见使用示例

# 查看所有进程
ps aux    # 显示所有进程及资源占用详情
ps -ef    # 完整格式显示进程树及父进程信息

# 查找特定进程(这个使用频率非常高)
ps aux | grep nginx  # 查找与nginx相关的进程
pgrep -f abc.py      # 通过进程名或命令行快速获取PID(与ps互补)

# 分析资源占用
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 10  # 按CPU排序前10进程

2.1.2 top/htop:动态监控进程资源占用


(一)基础概念

  • top:实时动态查看系统进程状态及资源占用(CPU、内存、负载),默认集成于所有Linux发行版。
  • htoptop的增强版,支持彩色显示、鼠标操作、垂直/水平滚动,需手动安装但交互性更强。

(二)基础指令与示例

  1. top 指令

启动命令:

top          # 默认启动,按 q 退出
top -d 2     # 设置刷新间隔为2秒
top -p 1234  # 仅监控PID为1234的进程
  • 排序控制(运行时按键):
    • P:按CPU占用降序
    • M:按内存占用降序
    • N:按PID排序
  • 常用交互命令
    • k:终止进程(需输入PID)
    • 1:展开显示所有CPU核心的负载
    • Shift + >:滚动查看完整命令行
  1. htop 指令

安装与启动:

sudo apt install htop  # Ubuntu/Debian安装
htop                   # 启动(支持鼠标点击操作)

核心优势与操作

  • 鼠标交互
    • 点击表头排序(如CPU%、MEM%)
    • 拖动进程到其他位置
  • 快捷键
    • F2:进入设置菜单
    • F3:搜索进程
    • F4:过滤进程名称
    • Space:标记进程批量操作
    • F9:发送信号(如终止进程)

(三)使用场景对比

工具优势劣势适用场景
top无需安装,兼容性强界面单调,操作依赖键盘快速诊断服务器瞬时负载
htop交互友好,信息丰富需手动安装本地开发机深度分析进程关系

(四)常见操作示例

# 生成资源快照(输出到文件)
top -b -n 3 > top_snapshot.txt  # 非交互模式运行3次刷新后保存

# 监控特定用户的进程
top -u www-data    # 仅显示www-data用户的进程
htop -u mysql      # htop过滤mysql用户进程

# 结合watch持续观测
watch -n 2 "top -bn1 | grep nginx"  # 每2秒刷新一次nginx进程状态

2.2 进程的生命周期管理

2.2.1 kill:终止进程( 慎重使用!


(一)基础概念

kill 是一个用于向进程发送信号的核心命令,通过指定PID或进程名来控制进程的运行状态,从而实现进程的终止、暂停、恢复或重新加载配置等操作。

(二)基本操作与示例

kill 通过发送信号与进程交互,不同信号对应不同操作。默认情况下,kill 发送 SIGTERM(15) 信号,请求进程正常退出;若进程未响应,则需使用 SIGKILL(9) 强制终止。终止其他用户的进程或系统进程需管理员权限sudo,普通用户只能操作自己的进程。

命令的基本语法指令:

kill [选项] <信号或编号> <PID或进程名>

常见信号作用:

信号名称编号含义
SIGTERM15请求终止进程(可被捕获或忽略)
SIGKILL9强制终止进程(立即生效,不可被捕获)
SIGHUP1挂起信号,常用于重新加载配置文件
SIGSTOP19暂停进程(不可被捕获)
SIGCONT18恢复已暂停的进程

常见使用示例

# 终止程序
kill 1234        # 发送SIGTERM(15)信号,要求进程正常退出
kill -9 1234     # 强制杀死PID为1234的进程

# 暂停与恢复进程
kill -SIGSTOP 1234   # 暂停PID为1234的进程
kill -SIGCONT 1234   # 恢复已暂停的进程

# 重新加载配置,适用于守护进程(如Nginx、Apache)的配置热更新
kill -HUP 1234       # 通知进程重新加载配置文件

# 终止多个进程或进程组
kill 1234 5678     # 终止PID为1234和5678的进程
kill -9 -1234      # 杀死PID为1234的进程及其子进程

2.2.2 pkill / killall :按名称批量操作进程


(一)基础概念

  • pkill:通过进程名或属性模式匹配发送信号,支持正则表达式和模糊查询,批量操作效率高。
  • killall:根据 完整进程名 精确匹配进程并发信号,名称需完全一致(区分大小写)。两者均需谨慎使用以避免误杀关键进程。

(二)基本操作与示例

  1. pkill 指令

语法与核心选项:

pkill [选项] <模式>  
# 常用选项  
  -f         # 匹配完整命令行(包括参数)  
  -u USER    # 仅匹配指定用户的进程  
  -SIGNAL    # 指定信号(默认 SIGTERM)  

常见使用场景:

# 终止所有匹配名称的进程  
pkill nginx             # 终止所有名为nginx的进程  
pkill -9 -f "python3 app.py"  # 强制终止包含"python3 app.py"命令的进程  

# 按用户过滤操作  
pkill -u www-data       # 终止www-data用户的所有进程  

# 发送自定义信号  
pkill -HUP rsyslogd     # 通知rsyslogd重新加载配置(等效 kill -HUP)  
  1. killall 指令

语法与核心选项:

killall [选项] <进程名>  
# 常用选项  
  -e          # 精确匹配长进程名  
  -i          # 交互式确认操作  
  -SIGNAL     # 指定信号(默认 SIGTERM)  

常见使用场景:

# 批量终止进程  
killall chrome          # 终止所有名为chrome的进程  
killall -9 mysqld       # 强制终止mysqld进程  

# 交互式安全操作  
killall -i -HUP nginx   # 询问确认后重新加载nginx配置  

# 精确匹配长名称  
killall -e "python3.11" # 仅终止完整名为python3.11的进程  

(三)关键注意事项

  1. 权限要求

    • 终止其他用户或系统进程需 sudo 提权。
    • 普通用户仅可操作自身进程。
  2. 风险控制

    • pkill "init"killall bash 可能造成系统崩溃,慎用 -9 信号。
    • 建议先通过 pgrepps 验证匹配结果:
      pgrep -af nginx    # 查看将被终止的进程列表  
      
  3. 工具差异

    特性pkillkillall
    匹配规则支持正则表达式和模糊匹配仅匹配完整进程名
    跨用户操作支持 -u 过滤用户默认不区分用户
    信号发送灵活性直接指定信号(如 -HUP需用 -s-SIGNAL 指定

(四)典型应用场景

  1. 批量清理僵尸进程

    pkill -9 -u nobody   # 强制终止nobody用户的所有无响应进程  
    
  2. 服务热更新

    killall -HUP haproxy  # 重新加载haproxy配置(不中断服务)  
    
  3. 开发环境快速重启

    pkill -f "npm run dev" && npm run dev  # 终止旧进程并重启  
    

注释:

  • 优先推荐 pkill:灵活性强,适合模糊匹配和复杂场景。
  • 谨慎使用 killall:名称精确匹配可能误杀同名进程(如 killall init)。
  • 操作铁律:先验证目标进程,再发送最小必要信号(避免直接 -9)。

2.3 系统服务管理与日志查询

2.3.1 systemctl:服务管理


(一)基础概念

systemctl 是用于管理和控制 systemd 系统及服务管理器的核心命令行工具。作为现代Linux系统的初始化系统,systemd替代了传统的SysV initUpstart,而 systemctl 整合了旧版 servicechkconfig 的功能,提供更高效的服务管理方式。

(二)四大功能

  1. 服务生命周期管理

负责服务的 启动(start)、停止(stop)、重启(restart)、重载配置(reload) 等操作。

systemctl start nginx.service   # 启动Nginx服务
systemctl stop sshd             # 停止SSH服务(可省略.service后缀)
  1. 服务自启配置(这个一定要会!超级常用

设置服务在系统启动时 自动启用(enable) 或 禁用(disable)。

systemctl enable docker        # 启用Docker开机自启
systemctl disable apache2      # 禁止Apache开机自启
  1. 状态监控与日志

查看服务的实时状态、依赖关系和日志信息。

systemctl status mysql       # 显示MySQL的详细状态(含进程PID、运行时间等)
journalctl -u nginx -f       # 实时追踪Nginx日志(需结合journalctl)
  1. 单元文件(Unit)管理

单元文件(Unit File) 是systemd管理资源的基础,包括服务(.service)、挂载点(.mount)、定时器(.timer)等。其支持自定义单元文件。

systemctl edit nginx.service   # 扩展或覆盖默认服务配置
systemctl daemon-reload        # 重载修改后的单元文件(超级关键的操作)

2.3.1 journalctl:查看系统日志


(一)基础概念

journalctl 是用于管理和查询 systemd日志系统 的核心命令行工具。它是 systemd 生态的一部分,替代了传统分散的日志管理方式,提供统一、结构化的日志查询和分析功能。

(二)基本操作与示例

常见使用示例

# 服务故障排查
journalctl -u sshd -p err --since "today"  # 查看 SSH 服务的错误日志
journalctl -u docker.service -f            # 实时追踪 Docker 容器日志

# 系统启动问题分析
journalctl -b       # 显示本次启动的日志
journalctl -k       # 查看内核启动消息

# 性能监控
journalctl --since "1 hour ago" | grep "high CPU"   # 按 CPU 使用率筛选高负载进程日志
journalctl --since "1 hour ago" -p err -o json > error_logs.json   # 导出最近 1 小时的错误日志为 JSON

2.4 章尾总结

这部分工作在实际操作中非常重要且使用频率非常高,各位看官老爷可进行深度学习,有些关键操作在不够了解的情况下,千万不要随意尝试,很容易造成崩溃!

关键命令总结

操作命令
静态查看进程状态ps
动态监控进程资源占用top / htop
终止进程kill
按名称批量操作进程pkill / killall
服务管理systemctl
查看系统日志journalctl



结 束 语

能够看到这里的观众老爷,无疑是对up的最大肯定和支持,在此恳求各位观众老爷能够多多点赞、收藏和关注(强烈推荐大家关注一下up主和新建的这个合集“Ubuntu系统教学系列”)。在这个合集中,未来将持续给大家分享关于Ubuntu系统生态中的多种常见开发实用操作。未来也将继续分享Docker、conda、ROS等等各种实用干货。感谢大家支持!




往期回顾 — 专栏 “Ubuntu系统教学系列”


专栏: Ubuntu系统教学系列

Ubuntu教学系列(一):安装win11+Ubuntu双系统并配置Ubuntu常用软件

Ubuntu教学系列(二):安装微信和QQ通讯软件以及输入法

Ubuntu教学系列(三): “高频率” 终端命令行指令操作

Ubuntu教学系列(四):软件包管理深度解析(从APT到源码编译)

Ubuntu系列教学(五):文件与目录的精准操控

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值