思维导图
一、系统进程管理
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 -l
或 lsblk
)
# 列出所有磁盘及其分区信息
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的灵活运用和文件系统的挂载,这些都是高级系统运维的必备技能。熟练掌握这些命令和流程,是保障系统稳定、高效运行,以及合理规划和利用存储资源的关键。
练习题
题目:
- 列出当前系统中所有用户的所有进程,以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并替换设备路径。
16. 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
命令效率更高。