五、Linux进程与磁盘管理

#王者杯·14天创作挑战营·第4期#

作者:IvanCodes
日期:2025年8月2日
专栏:Linux教程

思维导图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、系统进程管理

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/vdbKVM等虚拟化环境中常见的设备名。分区名为 /dev/vda1, /dev/vda2
分区方案MBR vs GPTMBR传统方案,最大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: 高性能的日志文件系统,适合大文件高性能计算

代码示例:

# 将 /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)

# 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)

# 将 /dev/sdb1 分区挂载到 /data 目录
mkdir /data
mount /dev/sdb1 /data

卸载 (umount)

# 通过挂载点卸载
umount /data
# 或者通过设备名卸载
umount /dev/sdb1

永久挂载 (/etc/fstab)
为了系统启动时自动挂载,需要修改 /etc/fstab 文件。
fstab 文件格式: <设备> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>
代码示例: (推荐使用UUID)

# 首先获取 /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)

# 以易读格式显示所有挂载的文件系统的空间使用情况
df -h

查看文件/目录大小 (du)

# 只显示 /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风格命令。

  1. 查找 cron 的PID:
ps -ef | grep 'cron' | grep -v 'grep'

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

  1. top 按内存排序:

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

kill 5432
# 或者
kill -15 5432

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

  1. 后台运行命令:
tar -czf /tmp/backup.tar.gz /home &

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

  1. 查看后台作业:
jobs

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

  1. 查看磁盘空间和inode:
df -hi

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

  1. 计算目录总大小:
du -sh /usr/share

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

  1. 列出分区表:
fdisk -l /dev/sda

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

  1. 格式化为xfs:
mkfs.xfs /dev/sdb1

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

  1. 临时挂载:
mount /dev/sdb1 /mnt/new_disk

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

  1. 创建物理卷:
pvcreate /dev/sdc /dev/sdd

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

  1. 创建卷组:
vgcreate datastore_vg /dev/sdc /dev/sdd

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

  1. 创建逻辑卷:
lvcreate -n web_data_lv -L 20G datastore_vg

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

  1. 编写 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非常有用。
  1. top 按用户过滤:

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

killall -9 data_process.py
# 或者
killall -SIGKILL data_process.py
  • 解析: killall 命令可以直接通过进程名称操作进程。-9-SIGKILL强制终止信号,它会立即杀死所有名为 data_process.py 的进程,不给它们任何清理资源的机会。这是一种最后的手段,仅在正常终止 (killall data_process.py) 无效时使用。
  1. 后台继续运行已停止的作业:
bg %2
  • 解析: bg 命令用于将一个已停止 (Stopped) 的作业切换到后台继续运行%2 中的 2 是从 jobs 命令输出的 [2] 中获取的作业号。执行此命令后,vim 进程会在后台继续,但由于 vim 是一个交互式编辑器,它在后台可能会因为等待输入而再次停止。这个命令对于非交互式的、被 Ctrl+Z 暂停的计算型或I/O型任务更有实际意义
  1. lsblk 显示文件系统类型和UUID:
lsblk -f
  • 解析: lsblk 命令的 -f 选项 (short for --fs) 会在默认的输出基础上,额外增加 FSTYPE, UUID, LABEL, 和 MOUNTPOINT文件系统相关的信息。这对于快速识别每个分区格式化成的文件系统类型,以及获取用于 /etc/fstabUUID来说非常方便,比逐个使用 blkid 命令效率更高
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值