一、进程管理

1.1 进程基本概念

进程是程序的一次运行实例。Linux 系统中每个进程都有唯一的进程标识符 PID(Process ID),以及标识其来源的父进程 ID PPID。所有用户态进程最终都起源于 systemd(PID 为 1)。

进程的生命周期通常包括:创建(fork)→ 执行(exec)→ 运行/等待 → 终止(exit)→ 父进程回收。若子进程终止后父进程未及时回收其资源,该进程将变为僵尸进程(Zombie),持续占用进程表项。

常见进程状态如下:

状态含义是否占用 CPU能否强制终止
R运行或可运行
S可中断睡眠
D不可中断睡眠,通常等待 I/O否,即使 kill -9 也无效
T已停止/挂起需先恢复
Z僵尸进程否,已死亡

1.2 静态查看进程

ps:进程快照

ps 用于获取某一时刻的进程状态,常用组合:

# 查看所有进程详细信息
ps aux

# 按 CPU 占用率降序排列
ps aux --sort=-%cpu | head

# 按内存占用率降序排列
ps aux --sort=-%mem | head

# 自定义输出字段
ps -eo cmd,pid,ppid,user,%cpu,%mem,stat,start_time

ps aux 输出字段说明:

字段说明
USER运行进程的用户
PID进程 ID
%CPUCPU 占用率
%MEM内存占用率
VSZ虚拟内存大小
RSS实际驻留内存大小
TTY进程运行的终端
STAT进程状态
START启动时间
TIME占用 CPU 总时间
COMMAND进程命令
pstree:以树状结构查看进程
# 查看完整进程树
pstree

# 显示 PID
pstree -p

# 查看指定用户的进程
pstree -u apache
lsof:查看端口与文件占用
# 查看 80 端口被哪个进程占用
lsof -i :80

# 查看某个文件被哪个进程使用
lsof /etc/hosts
netstat 与 ss:查看网络连接与监听端口
# 查看所有 TCP 监听端口及对应进程
netstat -tnlp

# 查看 22 端口状态
netstat -tnlp | grep :22

# ss 命令与 netstat 功能等价,性能更优
ss -tnlp
ss -tnlp | grep :22

参数说明:

参数含义
-tTCP 协议
-uUDP 协议
-n以数字形式显示端口,不做服务名解析
-l仅显示监听状态的端口
-p显示进程名和 PID
-a显示所有连接状态

1.3 动态查看进程

top:实时系统监控

top 界面分为顶部汇总信息和下方进程列表两部分。

顶部信息包含:

内容
第 1 行当前时间、系统运行时长、登录用户数、1/5/15 分钟平均负载
第 2 行总进程数、运行中、休眠、停止、僵尸进程数量
第 3 行CPU 使用率:us 用户态、sy 内核态、id 空闲、wa I/O 等待
第 4 行内存总量、已用、空闲、缓存/缓冲区
第 5 行Swap 总量、已用、空闲

常用交互快捷键:

按键功能
q退出 top
k杀死进程,输入 PID 后回车
r调整进程 nice 值
P按 CPU 使用率排序
M按内存使用率排序
1显示每个 CPU 核心的使用情况
h显示帮助

命令行参数示例:

# 每 5 秒刷新一次
top -d 5

# 仅监控指定 PID
top -p 1234,5678

# 仅显示指定用户的进程
top -u apache

# 批处理模式输出到文件
top -b -n 3 > top.log
htop:增强版 top

htop 提供更友好的交互界面,支持鼠标操作和进程树视图。

# Rocky 安装
sudo dnf -y install epel-release
sudo dnf -y install htop

# Ubuntu 安装
sudo apt -y install htop

1.4 进程控制

kill:向进程发送信号

常用信号:

信号数值作用
SIGHUP1重新加载配置文件,PID 不变
SIGINT2中断进程,类似 Ctrl+C
SIGKILL9强制终止,无法被捕获或忽略
SIGTERM15正常终止,默认信号
SIGSTOP19挂起进程
SIGCONT18恢复被挂起的进程

示例:

# 正常终止进程
kill 3324

# 强制终止进程
kill -9 5221

# 重新加载服务配置
kill -1 3324
killall:按进程名批量终止
# 终止所有 httpd 进程
killall httpd

1.5 其他常用系统信息命令

# 查看系统负载与运行时间
uptime

# 查看内存使用情况
free -m
free -h

# 查看 CPU 信息
lscpu
nproc

# 查看操作系统版本
cat /etc/redhat-release
uname -r
uname -m

二、Linux 网络基础

2.1 OSI 参考模型与 TCP/IP 模型

OSI 七层模型将网络通信划分为七个层次,每层负责不同功能:

层次名称主要功能典型设备/协议
第 7 层应用层为应用程序提供接口HTTP、FTP、DNS、DHCP
第 6 层表示层数据格式转换、加密解密SSL/TLS
第 5 层会话层建立、管理、终止会话RPC
第 4 层传输层端到端可靠数据传输TCP、UDP
第 3 层网络层逻辑寻址与路由转发IP、ICMP、路由器
第 2 层数据链路层帧封装、MAC 寻址、差错检测以太网、交换机
第 1 层物理层比特流传输网线、光纤、网卡

TCP/IP 模型是互联网实际采用的协议栈,通常分为四层:应用层、传输层、网络层、网络接入层(或细分为五层对等模型)。数据发送时逐层封装头部,接收时逐层解封装。

2.2 IP 地址基础

IPv4 地址由 32 位二进制组成,通常以点分十进制表示,如 192.168.1.1。每个 IP 地址由网络部分和主机部分组成,子网掩码用于划分两者边界。

常见 IP 地址分类:

类别范围默认掩码
A 类0.0.0.0 ~ 127.255.255.255/8
B 类128.0.0.0 ~ 191.255.255.255/16
C 类192.0.0.0 ~ 223.255.255.255/24
D 类224.0.0.0 ~ 239.255.255.255组播地址
E 类240.0.0.0 ~ 255.255.255.255保留研究用

私有地址范围(用于内网):

类别私有地址范围
A 类10.0.0.0 ~ 10.255.255.255
B 类172.16.0.0 ~ 172.31.255.255
C 类192.168.0.0 ~ 192.168.255.255

2.3 TCP 三次握手与四次挥手

三次握手建立连接

TCP 是面向连接的可靠传输协议,建立连接需要三次握手:

  1. 客户端发送 SYN 报文,序列号 Seq = a;
  2. 服务端回复 SYN + ACK 报文,序列号 Seq = b,确认号 Ack = a + 1;
  3. 客户端回复 ACK 报文,序列号 Seq = a + 1,确认号 Ack = b + 1。

三次握手的意义在于确认双方的收发能力均正常,并同步初始序列号。

四次挥手断开连接

TCP 连接关闭需要四次挥手:

  1. 主动方发送 FIN + ACK 报文;
  2. 被动方回复 ACK 报文;
  3. 被动方发送 FIN + ACK 报文;
  4. 主动方回复 ACK 报文,连接关闭。

由于 TCP 是全双工通信,两个方向的连接需要分别关闭,因此需要四次交互。

2.4 交换机工作原理

交换机工作在数据链路层(第 2 层),根据 MAC 地址转发数据帧。其核心机制包括:

  • MAC 地址学习:交换机收到数据帧后,记录源 MAC 地址与接收端口的对应关系;
  • MAC 地址表:维护 MAC 地址到端口的映射表;
  • 单播转发:已知目的 MAC 时,直接向对应端口转发;
  • 广播泛洪:未知目的 MAC 或广播帧时,向除源端口外的所有端口转发。

交换机每个端口属于独立的冲突域,有效隔离了物理层冲突。

2.5 路由器与路由基础

路由器工作在网络层(第 3 层),根据 IP 地址和路由表进行跨网段转发。路由表中的条目来源包括:

路由类型来源特点
直连路由接口配置 IP 后自动生成接口 UP 时存在
静态路由管理员手工配置适合小型稳定网络,无法自动适应拓扑变化
动态路由通过 OSPF、RIP 等协议学习适合大型网络,可自动收敛

跨网段通信路径示例(PC1 访问 PC3):

  1. PC1 判断目标 IP 与自身不在同一网段,将数据包发给网关;
  2. 交换机查 MAC 表,将数据包转发给路由器;
  3. 路由器查路由表,确定下一跳和出接口;
  4. 数据包经路由转发到达目标网段;
  5. 目标交换机将数据包交给 PC3。

2.6 VLAN 基础

VLAN(Virtual Local Area Network)将一个物理交换机在逻辑上划分为多个广播域。同一 VLAN 内的设备可以互通,不同 VLAN 默认隔离。

Access 端口用于连接终端设备,每个 Access 端口只属于一个 VLAN。配置思路:

system-view
vlan batch 10 20
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

VLAN 的作用包括:隔离广播域、提升安全性、灵活划分部门网络。

2.7 Linux 网络管理常用命令

# 查看 IP 地址
ip addr
ip addr show ens160

# 查看路由表
ip route

# 测试网络连通性
ping 192.168.1.1

# 追踪路由路径
traceroute 192.168.2.10

# 查看 DNS 配置
cat /etc/resolv.conf

# 查看主机名
hostname
hostnamectl

三、Docker 容器技术概览与 WordPress 部署

3.1 容器技术的价值

容器是一种轻量级的虚拟化技术,与传统虚拟机相比,容器共享宿主机内核,启动速度快、资源占用少。其核心优势包括:

  • 环境一致性:将应用及其依赖打包为镜像,确保开发、测试、生产环境一致;
  • 多版本共存:同一宿主机可运行不同版本的运行环境,互不干扰;
  • 快速恢复:结合编排平台可在故障时快速重新调度容器。

3.2 Docker 安装

以 Rocky Linux 为例:

# 1. 卸载旧版本
sudo dnf remove docker docker-client docker-client-latest docker-common \
  docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 2. 安装依赖
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

# 3. 添加 Docker 仓库(国内镜像站示例)
sudo yum-config-manager --add-repo \
  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4. 安装 Docker
sudo dnf install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

# 5. 启动并设置开机自启
sudo systemctl enable --now docker

# 6. 验证
sudo docker version

国内网络环境下,建议配置镜像加速器:

sudo cat > /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://ccr.ccs.tencentyun.com",
    "https://docker.m.daocloud.io",
    "https://docker.xuanyuan.me",
    "https://docker.1ms.run"
  ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

3.3 Docker 镜像与容器基本操作

镜像管理
# 查看本地镜像
docker images

# 从仓库拉取镜像
docker pull nginx:latest
docker pull wordpress
docker pull mariadb

# 修改镜像标签
docker tag old_name:new_tag new_name:new_tag

# 删除镜像
docker rmi image_name

# 导出镜像
docker save -o nginx.tar nginx:latest

# 导入镜像
docker load < nginx.tar
容器管理
# 运行容器(后台模式,端口映射)
docker run -d --name web1 -p 80:80 nginx

# 查看运行中的容器
docker ps

# 查看所有容器(含已停止)
docker ps -a

# 启动/停止/重启容器
docker start web1
docker stop web1
docker restart web1

# 删除容器
docker rm web1

# 强制删除所有容器
docker rm -f $(docker ps -aq)

# 进入容器执行命令
docker exec -it web1 bash

# 设置容器开机自启
docker run -d --name web2 --restart always -p 8080:80 nginx
# 或更新已运行容器
docker update --restart always web1

3.4 WordPress 容器化部署实验

本实验使用 MariaDB 作为数据库,WordPress 作为博客应用,通过 Docker 网络实现容器间通信。

步骤一:拉取镜像
docker pull mariadb
docker pull wordpress
步骤二:创建专用网络
docker network create wordpress_net
步骤三:部署 MariaDB 数据库
docker run -d \
  --name wordpress_db \
  --network wordpress_net \
  -e MARIADB_ROOT_PASSWORD=yangge \
  -e MARIADB_DATABASE=wordpress \
  -e MARIADB_USER=wpuser \
  -e MARIADB_PASSWORD=yangge \
  -v mariadb_data:/var/lib/mysql \
  mariadb

参数说明:

参数说明
–name容器名称
–network指定容器加入的网络
-e MARIADB_ROOT_PASSWORDroot 密码
-e MARIADB_DATABASE初始化数据库名
-e MARIADB_USER / PASSWORD创建普通数据库用户
-v mariadb_data:/var/lib/mysql使用命名卷持久化数据库数据
步骤四:部署 WordPress
docker run -d \
  --name wordpress \
  --network wordpress_net \
  -p 83:80 \
  -e WORDPRESS_DB_HOST=wordpress_db:3306 \
  -e WORDPRESS_DB_USER=wpuser \
  -e WORDPRESS_DB_PASSWORD=yangge \
  -e WORDPRESS_DB_NAME=wordpress \
  -v wordpress_data:/var/www/html \
  wordpress:latest

参数说明:

参数说明
-p 83:80将宿主机 83 端口映射到容器 80 端口
-e WORDPRESS_DB_HOST数据库连接地址,使用容器名作为主机名
-e WORDPRESS_DB_USER / PASSWORD / NAME连接数据库的凭据和数据库名
-v wordpress_data:/var/www/html持久化 WordPress 网站文件
步骤五:验证与访问
# 查看容器运行状态
docker ps

# 进入数据库容器验证连接
docker exec -it wordpress_db bash
mariadb -uwpuser -pyangge

在浏览器中访问 http://宿主机IP:83,即可进入 WordPress 初始化向导,按提示完成站点标题、管理员账号等配置。

3.5 部署经验小结

  • 容器间通过 Docker 自定义网络通信时,可直接使用容器名作为主机名解析;
  • 数据库密码建议使用复杂度更高的字符串,实验环境可简化,生产环境必须严格管理;
  • 数据持久化应通过 -v 挂载卷实现,避免容器删除后数据丢失;
  • 端口映射需注意宿主机端口是否被其他服务占用,可通过 ss -tnlp 提前检查。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐