思维导图
一、系统进程管理
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: 退出topk: 杀死 (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 -l 或 lsblk)
# 列出所有磁盘及其分区信息 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的灵活运用和 文件系统的挂载,这些都是 高级系统运维的 必备技能。熟练掌握 这些命令和流程,是 保障系统稳定、高效运行,以及 合理规划和利用存储资源的 关键。
---
## 练习题
题目:
- 列出当前系统中所有用户的所有进程,以BSD风格显示。
- 查找一个名为
cron(或crond) 的进程的PID。 - 使用
top命令,并按内存使用量对进程进行排序。 - 假设有一个PID为
5432的进程需要被正常终止,请写出命令。 - 启动一个
tar -czf /tmp/backup.tar.gz /home命令,并立即将其放入后台运行。 - 查看当前终端会话中的所有后台作业。
- 以易于阅读的格式,显示所有已挂载文件系统的磁盘空间和inode使用情况。
- 仅计算并显示
/usr/share目录的总大小。 - 列出
/dev/sda磁盘的分区表信息。 - 将新磁盘
/dev/sdb的第一个分区 (/dev/sdb1) 格式化为xfs文件系统。 - 将
/dev/sdb1临时挂载到/mnt/new_disk目录 (假设目录已创建)。 - 将
/dev/sdc和/dev/sdd两块新磁盘创建成物理卷(PV)。 - 使用上一步创建的两个物理卷,创建一个名为
datastore_vg的卷组(VG)。 - 从
datastore_vg卷组中,创建一个名为web_data_lv,大小为 20GB 的逻辑卷(LV)。 - 为
/dev/mapper/datastore_vg-web_data_lv这个逻辑卷编写一个/etc/fstab条目,使其开机自动挂载到/var/www/html,文件系统为ext4,使用默认选项。 - 使用
pstree命令,查看所有进程的树状结构,并同时显示每个进程的PID。 - 在
top命令的交互界面中,如何只显示用户apache拥有的所有进程? - 有多个名为
data_process.py的Python脚本进程正在运行,并且都已无响应。请写出一条命令,能够强制终止所有这些进程。 - 假设你通过
jobs命令看到一个作业[2]+ Stopped vim my_script.sh。请写出命令,使其在后台继续运行。 - 使用
lsblk命令,查看块设备信息,并同时显示文件系统类型(FSTYPE)和通用唯一标识符(UUID)。
列出所有进程 (BSD风格):
ps aux解析:
ps aux是查看系统中所有进程详细信息的常用BSD风格命令。查找
cron的PID:ps -ef | grep 'cron' | grep -v 'grep'解析:
ps -ef列出所有进程,grep 'cron'筛选出相关行,grep -v 'grep'排除grep命令本身。top按内存排序:- 运行
top。 - 在
top界面按大写字母M。
解析:M是top命令中按内存使用率排序的交互式快捷键。
- 运行
正常终止进程:
kill 5432 # 或者 kill -15 5432解析:
kill命令默认发送15(SIGTERM) 信号,这是请求进程正常退出的标准方式。后台运行命令:
tar -czf /tmp/backup.tar.gz /home &解析: 在命令末尾加上
&符号,即可让该命令在后台执行。查看后台作业:
jobs解析:
jobs命令列出当前shell会话中所有在后台运行或已停止的作业。查看磁盘空间和inode:
df -hi解析:
df(Disk Free) 命令的-h(human-readable) 和-i(inodes) 选项可以组合使用。计算目录总大小:
du -sh /usr/share解析:
du(Disk Usage) 命令用于计算目录大小,-s(summarize) 只显示总计,-h使其易读。列出分区表:
fdisk -l /dev/sda解析:
fdisk -l用于列出指定设备的分区表。格式化为xfs:
mkfs.xfs /dev/sdb1解析:
mkfs.xfs是专门用于创建xfs文件系统的命令。临时挂载:
mount /dev/sdb1 /mnt/new_disk解析:
mount命令的基本用法是mount 设备 挂载点。创建物理卷:
pvcreate /dev/sdc /dev/sdd解析:
pvcreate用于初始化一个或多个块设备,使其能被LVM用作物理卷。创建卷组:
vgcreate datastore_vg /dev/sdc /dev/sdd解析:
vgcreate用于将一个或多个物理卷组合成一个卷组。创建逻辑卷:
lvcreate -n web_data_lv -L 20G datastore_vg解析:
lvcreate从指定的卷组中划分出指定大小和名称的逻辑卷。-n指定名称,-L指定大小。编写
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并替换设备路径。pstree显示PID:pstree -p- 解析:
pstree命令的-p选项 (short for --show-pids) 的作用是在显示进程树的同时,将每个进程的进程ID (PID) 附加在进程名后面,这对于快速定位特定进程及其子进程的PID非常有用。
- 解析:
top按用户过滤:- 运行
top命令。 - 在
top的交互界面中,按下小写字母u。 - 此时
top会提示 "Which user to show"。 - 输入用户名
apache并按回车。
- 解析:
u是top命令中按用户过滤的交互式快捷键。输入用户名后,top的进程列表将只显示属于该用户的进程,这对于排查特定用户的资源消耗问题非常有效。再次按u并直接回车可以清除过滤,显示所有用户的进程。
- 运行
强制杀死所有同名进程:
killall -9 data_process.py # 或者 killall -SIGKILL data_process.py- 解析:
killall命令可以直接通过进程名称操作进程。-9或-SIGKILL是强制终止信号,它会立即杀死所有名为data_process.py的进程,不给它们任何清理资源的机会。这是一种最后的手段,仅在正常终止 (killall data_process.py) 无效时使用。
- 解析:
后台继续运行已停止的作业:
bg %2- 解析:
bg命令用于将一个已停止 (Stopped) 的作业切换到后台继续运行。%2中的2是从jobs命令输出的[2]中获取的作业号。执行此命令后,vim进程会在后台继续,但由于vim是一个交互式编辑器,它在后台可能会因为等待输入而再次停止。这个命令对于非交互式的、被Ctrl+Z暂停的计算型或I/O型任务更有实际意义。
- 解析:
lsblk显示文件系统类型和UUID:lsblk -f- 解析:
lsblk命令的-f选项 (short for --fs) 会在默认的输出基础上,额外增加FSTYPE,UUID,LABEL, 和MOUNTPOINT等文件系统相关的信息。这对于快速识别每个分区格式化成的文件系统类型,以及获取用于/etc/fstab的UUID来说非常方便,比逐个使用blkid命令效率更高。
- 解析: