五、Linux进程与磁盘管理

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
云原生网关 MSE Higress,422元/月
简介: 管理Linux服务器就像身兼两职:既是“医生”,又是“城市规划师”。作为“医生”,你得用ps和top给系统“体检”,看看哪些进程在运行;必要时用kill命令做“外科手术”,终止掉问题进程。作为“规划师”,你得先用fdisk把“土地”(磁盘)划分成“地块”(分区),再用mkfs铺上“地基”(文件系统),最后用mount把地块“挂牌”使用。而df和du就是你随时查看“土地”使用情况的测量工具。

思维导图

一、系统进程管理

1.1 查看进程 (ps & pstree)

实时了解系统中 正在运行进程系统监控第一步

静态查看进程 (ps)
ps 命令用于显示当前进程快照
常用选项组合:

  • ps -ef: 以标准格式显示所有进程完整信息
  • ps aux: 以BSD格式显示所有进程详细信息,包含CPU和内存使用率

代码示例:

# 显示系统中所有正在运行的进程
ps -ef

# 过滤出所有与 sshd 相关的进程
ps -ef | grep sshd

# 以BSD风格显示所有进程
ps aux

# 找出CPU使用率最高的进程 (结合 sort)
ps aux | sort -rnk 3 | head -n 5

查看进程树 (pstree)
pstree 命令以树状结构显示进程之间父子关系非常直观
代码示例:

# 显示所有进程的树状图
pstree

# 显示进程树,并附带进程的PID
pstree -p

1.2 动态监控进程 (top)

top 命令提供了一个实时动态系统进程视图

界面与交互:

  • 上半部分: 系统总体信息 (负载、CPU、内存、交换分区)
  • 下半部分: 进程列表,默认按CPU使用率排序
  • 常用交互命令:

    q: 退出 top
    k: 杀死 (kill) 一个进程 (会提示输入PID)
    M: 按内存使用率排序
    P: 按CPU使用率排序 (默认)
    1: 切换显示所有CPU核心的独立信息

代码示例:

# 启动 top 动态监控
top

1.3 终止进程 (kill & killall)

当进程无响应需要停止时,使用kill系列命令

kill (通过PID)
kill 命令通过进程ID (PID) 向进程发送信号
常用信号:

  • -15 : 正常终止信号。这是默认推荐首选的方式,允许进程清理资源后退出。
  • -9: 强制终止信号。进程无法捕获此信号,会立即被内核杀死。仅在 -15 无效时使用。

代码示例:

# 假设通过 ps -ef | grep 'my_app' 查到PID为 12345
# 尝试正常终止进程 12345
kill 12345

# 如果进程没有响应,强制杀死进程 12345
kill -9 12345

killall (通过进程名)
killall 命令直接通过进程名称杀死所有同名的进程。
代码示例:

# 杀死所有名为 httpd 的进程
killall httpd

# 强制杀死所有名为 chrome 的进程
killall -9 chrome

1.4 作业管理 (前台与后台)

可以在单个终端同时运行管理多个任务。

  • & (后台运行): 在命令末尾添加 &,可以使命令在后台运行。
  • jobs: 查看当前终端会话中正在后台运行已停止的作业。
  • fg : 将后台作业切换到前台运行。fg %作业号
  • bg: 将一个已停止 (例如通过 Ctrl+Z 暂停) 的作业切换到后台继续运行。bg %作业号
  • Ctrl+Z: 暂停当前正在前台运行的作业,并将其放入后台

代码示例:

# 启动一个长时间运行的命令,并将其放入后台
sleep 300 &

# 查看后台作业列表
jobs

# 假设 sleep 300 的作业号是 1,将其切换到前台
fg %1
# 此时可以按 Ctrl+C 终止它,或按 Ctrl+Z 再次暂停它

# 假设一个作业被暂停了,让它在后台继续运行
bg %1

二、磁盘与文件系统管理

2.1 磁盘分类与设备命名

理解Linux如何 识别和命名磁盘是 所有磁盘管理操作的 基础

| 分类 | 示例设备名 | 描述 |
| :--- | :--- | :--- |
| IDE / ATA (PATA) 硬盘 | /dev/hda, /dev/hdb | 较早的硬盘接口标准, 现在已不常见a, b 代表 主/从设备。分区名为 /dev/hda1, /dev/hda2。 |
| SATA/SAS/SCSI 硬盘 | /dev/sda, /dev/sdb | 最常见的硬盘类型。 a, b 代表 第一块、第二块磁盘。分区名为 /dev/sda1, /dev/sda2。 |
| NVMe 固态硬盘 | /dev/nvme0n1 | 高速 M.2 接口的SSD。 nvme0控制器n1命名空间(磁盘)。分区名为 /dev/nvme0n1p1。 |
| 虚拟化磁盘 (VirtIO) | /dev/vda, /dev/vdb | 在 KVM等虚拟化环境中常见的设备名。分区名为 /dev/vda1, /dev/vda2。 |
| 分区方案 | MBR vs GPT | MBR传统方案, 最大2TB,最多4主分区。 GPT现代方案, 支持大容量,分区数多。 |

### 2.2 分区管理 (fdisk & gdisk)
分区是将一块 物理磁盘划分成 多个逻辑区域的过程。

列出分区 (fdisk -llsblk)
# 列出所有磁盘及其分区信息 fdisk -l # 以树状结构清晰显示 lsblk

使用 fdisk (用于MBR分区)
fdisk 是一个 交互式磁盘分区工具。
代码示例: (对新磁盘 /dev/sdb 进行分区)
# 启动fdisk交互模式,目标是/dev/sdb fdisk /dev/sdb

### 2.3 格式化分区 (mkfs)
分区后,必须 创建文件系统 (格式化),才能 存储数据

语法结构: mkfs.[文件系统类型] [设备名]
常用文件系统类型:
ext4: Linux最常用的日志文件系统,稳定可靠 xfs: 高性能的日志文件系统, 适合大文件高性能计算

代码示例:
bash # 将 /dev/sdb1 分区格式化为 xfs 文件系统 mkfs.xfs /dev/sdb1 #查看格式化类型 blkid /dev/sdb1 # 将 /dev/sdc1 分区格式化为 ext4 文件系统 mkfs.ext4 /dev/sdc1


### 2.4 逻辑卷管理 (LVM)
LVM (Logical Volume Management) 提供了 比传统分区更灵活磁盘管理方式,可以 动态调整大小。
核心概念:
物理卷 (PV) -> 卷组 (VG) -> 逻辑卷 (LV)
( 将物理分区加入到 存储池,再从 存储池中划分出 可用的逻辑分区)

代码示例: (将 /dev/sdb1/dev/sdc1 组合成LVM)
bash # 1. 创建物理卷 (PV) pvcreate /dev/sdb1 /dev/sdc1 # 2. 创建卷组 (VG),命名为 my_vg vgcreate my_vg /dev/sdb1 /dev/sdc1 # 3. 从卷组 my_vg 中创建一个名为 my_lv 的逻辑卷 (LV),大小为15GB lvcreate -n my_lv -L 15G my_vg # 4. 格式化创建好的逻辑卷 mkfs.ext4 /dev/my_vg/my_lv # 5. LVM逻辑卷可以被挂载和使用 mkdir /mnt/lvm_data mount /dev/my_vg/my_lv /mnt/lvm_data

### 2.5 挂载与卸载 (mount & umount)
挂载 (mount)
bash # 将 /dev/sdb1 分区挂载到 /data 目录 mkdir /data mount /dev/sdb1 /data
卸载 (umount)
bash # 通过挂载点卸载 umount /data # 或者通过设备名卸载 umount /dev/sdb1

永久挂载 (/etc/fstab)
为了 系统启动时自动挂载,需要修改 /etc/fstab 文件。
fstab 文件格式: <设备> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>
代码示例: (推荐使用UUID)
bash # 首先获取 /dev/sdb1 的UUID blkid /dev/sdb1 # 将获取到的UUID写入 /etc/fstab # 假设UUID为 "a1b2c3d4-..." # 在 /etc/fstab 文件末尾添加一行: UUID="a1b2c3d4-..." /data ext4 defaults 0 2
验证 fstab 配置: sudo mount -a

### 2.6 检查磁盘空间 (df & du)
查看文件系统空间 (df)
bash # 以易读格式显示所有挂载的文件系统的空间使用情况 df -h
查看文件/目录大小 (du)
bash # 只显示 /var/log 目录的总大小 du -sh /var/log

## 三、总结
>我们这次 主要介绍了Linux中 进程管理磁盘管理核心操作。从 实时监控和控制进程,到 物理磁盘的分区、格式化,再到 LVM的灵活运用文件系统的挂载,这些都是 高级系统运维必备技能。熟练掌握 这些命令和流程,是 保障系统稳定、高效运行,以及 合理规划和利用存储资源关键

---

## 练习题

题目:

  1. 列出当前系统中所有用户的所有进程,以BSD风格显示。
  2. 查找一个名为 cron (或 crond) 的进程的PID。
  3. 使用 top 命令,并按内存使用量对进程进行排序。
  4. 假设有一个PID为 5432 的进程需要被正常终止,请写出命令。
  5. 启动一个 tar -czf /tmp/backup.tar.gz /home 命令,并立即将其放入后台运行。
  6. 查看当前终端会话中的所有后台作业。
  7. 以易于阅读的格式,显示所有已挂载文件系统的磁盘空间和inode使用情况。
  8. 仅计算并显示 /usr/share 目录的总大小。
  9. 列出 /dev/sda 磁盘的分区表信息。
  10. 将新磁盘 /dev/sdb 的第一个分区 (/dev/sdb1) 格式化为 xfs 文件系统。
  11. /dev/sdb1 临时挂载到 /mnt/new_disk 目录 (假设目录已创建)。
  12. /dev/sdc/dev/sdd 两块新磁盘创建成物理卷(PV)。
  13. 使用上一步创建的两个物理卷,创建一个名为 datastore_vg 的卷组(VG)。
  14. datastore_vg 卷组中,创建一个名为 web_data_lv,大小为 20GB 的逻辑卷(LV)。
  15. /dev/mapper/datastore_vg-web_data_lv 这个逻辑卷编写一个 /etc/fstab 条目,使其开机自动挂载到 /var/www/html,文件系统为 ext4,使用默认选项。
  16. 使用 pstree 命令,查看所有进程的树状结构,并同时显示每个进程的PID。
  17. top 命令的交互界面中,如何只显示用户 apache 拥有的所有进程?
  18. 有多个名为 data_process.py 的Python脚本进程正在运行,并且都已无响应。请写出一条命令,能够强制终止所有这些进程。
  19. 假设你通过 jobs 命令看到一个作业 [2]+ Stopped vim my_script.sh。请写出命令,使其在后台继续运行
  20. 使用 lsblk 命令,查看块设备信息,并同时显示文件系统类型(FSTYPE)和通用唯一标识符(UUID)。
答案与解析:
  1. 列出所有进程 (BSD风格):

    ps aux
    

    解析: ps aux 是查看系统中所有进程详细信息的常用BSD风格命令。

  2. 查找 cron 的PID:

    ps -ef | grep 'cron' | grep -v 'grep'
    

    解析: ps -ef 列出所有进程,grep 'cron' 筛选出相关行,grep -v 'grep' 排除grep命令本身。

  3. top 按内存排序:

    1. 运行 top
    2. top 界面按大写字母 M
      解析: Mtop 命令中按内存使用率排序的交互式快捷键。
  4. 正常终止进程:

    kill 5432
    # 或者
    kill -15 5432
    

    解析: kill 命令默认发送 15 (SIGTERM) 信号,这是请求进程正常退出的标准方式。

  5. 后台运行命令:

    tar -czf /tmp/backup.tar.gz /home &
    

    解析: 在命令末尾加上 & 符号,即可让该命令在后台执行。

  6. 查看后台作业:

    jobs
    

    解析: jobs 命令列出当前shell会话中所有在后台运行或已停止的作业。

  7. 查看磁盘空间和inode:

    df -hi
    

    解析: df (Disk Free) 命令的 -h (human-readable) 和 -i (inodes) 选项可以组合使用。

  8. 计算目录总大小:

    du -sh /usr/share
    

    解析: du (Disk Usage) 命令用于计算目录大小,-s (summarize) 只显示总计,-h 使其易读。

  9. 列出分区表:

    fdisk -l /dev/sda
    

    解析: fdisk -l 用于列出指定设备的分区表。

  10. 格式化为xfs:

    mkfs.xfs /dev/sdb1
    

    解析: mkfs.xfs 是专门用于创建xfs文件系统的命令。

  11. 临时挂载:

    mount /dev/sdb1 /mnt/new_disk
    

    解析: mount 命令的基本用法是 mount 设备 挂载点

  12. 创建物理卷:

    pvcreate /dev/sdc /dev/sdd
    

    解析: pvcreate 用于初始化一个或多个块设备,使其能被LVM用作物理卷。

  13. 创建卷组:

    vgcreate datastore_vg /dev/sdc /dev/sdd
    

    解析: vgcreate 用于将一个或多个物理卷组合成一个卷组。

  14. 创建逻辑卷:

    lvcreate -n web_data_lv -L 20G datastore_vg
    

    解析: lvcreate 从指定的卷组中划分出指定大小和名称的逻辑卷。-n 指定名称,-L 指定大小。

  15. 编写 fstab 条目:

    /dev/mapper/datastore_vg-web_data_lv  /var/www/html  ext4  defaults  0  2
    

    解析: 这是 /etc/fstab 的标准格式。逻辑卷的设备路径通常是 /dev/mapper/VG名-LV名/dev/VG名/LV名。这里使用了前者。为了更稳定,推荐使用 blkid 查出该LV的UUID并替换设备路径。

  16. pstree 显示PID:

    pstree -p
    
    • 解析: pstree 命令的 -p 选项 (short for --show-pids) 的作用是在显示进程树的同时,将每个进程的进程ID (PID) 附加在进程名后面,这对于快速定位特定进程及其子进程的PID非常有用。
  17. top 按用户过滤:

    1. 运行 top 命令。
    2. top 的交互界面中,按下小写字母 u
    3. 此时 top 会提示 "Which user to show"。
    4. 输入用户名 apache 并按回车。
    • 解析: utop 命令中按用户过滤的交互式快捷键。输入用户名后,top 的进程列表将只显示属于该用户的进程,这对于排查特定用户的资源消耗问题非常有效。再次按 u 并直接回车可以清除过滤,显示所有用户的进程。
  18. 强制杀死所有同名进程:

    killall -9 data_process.py
    # 或者
    killall -SIGKILL data_process.py
    
    • 解析: killall 命令可以直接通过进程名称操作进程。-9-SIGKILL强制终止信号,它会立即杀死所有名为 data_process.py 的进程,不给它们任何清理资源的机会。这是一种最后的手段,仅在正常终止 (killall data_process.py) 无效时使用。
  19. 后台继续运行已停止的作业:

    bg %2
    
    • 解析: bg 命令用于将一个已停止 (Stopped) 的作业切换到后台继续运行%2 中的 2 是从 jobs 命令输出的 [2] 中获取的作业号。执行此命令后,vim 进程会在后台继续,但由于 vim 是一个交互式编辑器,它在后台可能会因为等待输入而再次停止。这个命令对于非交互式的、被 Ctrl+Z 暂停的计算型或I/O型任务更有实际意义
  20. lsblk 显示文件系统类型和UUID:

    lsblk -f
    
    • 解析: lsblk 命令的 -f 选项 (short for --fs) 会在默认的输出基础上,额外增加 FSTYPE, UUID, LABEL, 和 MOUNTPOINT文件系统相关的信息。这对于快速识别每个分区格式化成的文件系统类型,以及获取用于 /etc/fstabUUID来说非常方便,比逐个使用 blkid 命令效率更高
相关文章
|
3月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
692 57
|
3月前
|
存储 安全 Linux
三、Linux用户与权限管理详解
管理Linux系统就像当一个大楼的管家。首先,你得用useradd和passwd给新员工发“钥匙”(创建用户并设密码),并用groupadd把他们分到不同“部门”(用户组)。然后,你要为每个“房间”(文件或目录)设定规矩,这就是文件权限:用chmod命令设置谁(所有者、同部门、其他人)可以“进入”(x)、“读取”(r)或“写入”(w)。最后,用chown还能把房间的归属权转让给别人。
|
3月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
二、Linux文本处理与文件操作核心命令
|
2月前
|
负载均衡 算法 Java
【SpringCloud(3)】Ribbon负载均衡:IRule原理轮询算法;LB负载均衡;loadbalancer和IRule组件;Ribbon和Ngin负载均衡的区别
Spring Cloud Ribbon 是基于Netflix Ribbon实现的一套客户端的负载均衡工具 简单地说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时、重试等。就在在配置文件中列出Load Balancer(LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机链接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法
375 136
|
3月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
|
3月前
|
存储 缓存 NoSQL
工作 10 年!Redis 内存淘汰策略 LRU 和传统 LRU 差异,还傻傻分不清
小富带你深入解析Redis内存淘汰机制:LRU与LFU算法原理、实现方式及核心区别。揭秘Redis为何采用“近似LRU”,LFU如何解决频率老化问题,并结合实际场景教你如何选择合适策略,提升缓存命中率。
400 3
|
3月前
|
缓存 安全 Linux
六、Linux核心服务与包管理
在没有网络的情况下,使用系统安装光盘是获取RPM包的常用方法。场景二:配置本地文件镜像源 (使用系统安装光盘/ISO)(检查RPM包的GPG签名以保证安全) 或。YUM/DNF包管理工具 (yum/dnf)(此处可以放置您为本主题制作的思维导图)处理依赖问题的危险选项 (应极力避免)(覆盖文件、替换已安装包)。(list) 则是列出文件。(query file) 是。(假设系统安装光盘已挂载到。信息 (verbose)。(upgrade) 选项。(all) 已安装的包。(package) 选项
340 11
|
25天前
|
Web App开发 网络协议 Java
Windows 终端命令详解:PowerShell 初学者指南
Windows 终端是一个命令行工具,允许用户通过文本命令与系统交互,执行文件管理、系统配置和网络诊断等操作。PowerShell 是 Windows 终端的现代版本,相比传统的命令提示符(CMD),它功能更强大,支持脚本编写和复杂任务处理。本文将以 PowerShell 为主,带你从零开始学习。
|
3月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
|
3月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
620 1