📌 模块一:Linux 系统基础与进程管理(高频核心)

1. 核心命令与肌肉记忆

  • 文件与目录操作:

    • cd -:切换回上一次所在的目录(切错目录时极其有用)。

    • ls -lah:查看当前目录下所有文件的详细信息(包括隐藏文件和大小)。

    • mkdir -p /data/nginx/logs:递归创建多级目录。

    • cp -a source dest:归档复制,连同文件属性(权限、时间等)一起复制。

  • 文件查看与编辑:

    • vim 三板斧:打开文件 ➡ 按 i 进入编辑 ➡ 按 Esc 退出编辑 ➡ 输入 :wq 保存退出(放弃修改输入 :q!)。

    • tail -f /var/log/nginx/error.log(运维核心技能) 实时滚动查看日志最新内容。

    • grep -i "error" app.log:在日志中不区分大小写查找 “error” 关键字。

    • find / -name "*.conf":全盘查找后缀为 .conf 的文件。

  • 系统排查三板斧(性能优化/故障排查):

    • tophtop:查看系统整体 CPU、内存负载及当前消耗资源最高的进程。

    • df -h:查看磁盘空间占用情况,防止磁盘满了导致服务崩溃。

    • free -h:查看当前内存使用及剩余情况(关注 available 才是真实可用内存)。

    • ps -ef | grep mysql:查看 MySQL 进程是否存在、获取其进程号 (PID)。

    • kill -9 PID:强行杀死指定的进程(生产环境慎用,优先使用常规停止命令)。

2. 用户与权限管理

  • chmod 755 script.sh:赋予脚本所有者“读写执行”权限,所属组和其他人“读与执行”权限。

  • chown -R nginx:nginx /var/www/html:递归修改目录的所有者和所属组为 nginx

🧠 回忆快问快答(自测专用)

  1. 问: 服务突然卡死,第一步看什么?

    • 答: 先用 top 看 CPU/内存,再用 df -h 看磁盘是不是满了,同时用 tail -f 盯着服务日志。
  2. 问: 修改了一个配置文件,为了保险起见,修改前应该做什么?

    • 答: 必须先备份!例如 cp nginx.conf nginx.conf.bak_$(date +%F)

📌 模块二:Nginx 服务部署与反向代理(Web核心)

1. 核心概念理解

  • 反向代理(Reverse Proxy): 客户端直接访问 Nginx(暴露公网),Nginx 作为“代理人”去访问内网的真实后端服务(如 Java、Go、PHP),然后把结果返回给客户端。保护内网安全,方便做负载均衡。

  • 负载均衡(Load Balancing): 当后端有多台服务器时,Nginx 将请求按一定规则分发。

    • 轮询 (Round Robin):默认,按时间顺序逐一分发。

    • 权重 (Weight):根据服务器性能分配比例,性能好的机器权重高。

    • ip_hash:每个访客固定访问一个后端服务器,解决 Session 共享问题。

2. 极简 Nginx 核心配置模板

配置文件通常在 /etc/nginx/nginx.conf/etc/nginx/conf.d/ 目录下。

Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 1. 定义后端服务器集群(负载均衡)
upstream my_backend {
server 192.168.1.10:8080 weight=3; # 权重高
server 192.168.1.11:8080 weight=1;
}

server {
listen 80;
server_name localhost; # 或者是公司的域名

# 2. 静态资源托管
location / {
root /var/www/html;
index index.html index.htm;
}

# 3. 反向代理接口转发(匹配所有以 /api/ 开头的请求)
location /api/ {
proxy_pass http://my_backend/; # 转发给上面的后端集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

# 4. 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

3. Nginx 常用命令

  • nginx -t(极其重要) 修改配置后,先检查语法是否正确,看到 syntax is ok 才能重启。

  • systemctl nginx reload:热加载配置(平滑重启),不中断现有线上用户的访问。

  • systemctl restart nginx:强制重启 Nginx 服务。

🧠 回忆快问快答(自测专用)

  1. 问: 访问网页显示 502 Bad Gateway,一般是谁的问题?怎么排查?

    • 答: 通常是 Nginx 后面挂接的后端服务(如 Tomcat/Docker容器/Java程序)挂了或者端口没开。排查思路:先看 Nginx 错误日志,再去确认后端服务状态和端口连通性。
  2. 问: 访问网页显示 403 Forbidden,是什么原因?

    • 答: 权限问题。要么是 Nginx 没权限读取静态资源目录(检查 chmod),要么是 SELinux 限制,或者是配置里写了 deny 拒绝了该 IP。

📌 模块三:Shell 脚本自动化与定时任务(效能利器)

1. Shell 语法高频速记

  • 变量定义: PID=$(pgrep nginx)(把命令执行结果赋值给变量,注意等号两边不能有空格)。

  • 条件判断(注意方括号两边的空格):

    Bash

    1
    2
    3
    4
    5
    if [ -z "$PID" ]; then
    echo "Nginx is stopped!"
    else
    echo "Nginx is running with PID: $PID"
    fi
  • 常用判断条件: -d(目录是否存在)、-f(文件是否存在)、-z(字符串是否为空)。

2. 生产级:自动化监控与服务自愈脚本模板

创建一个 monitor.sh 脚本,用来监控 Nginx,挂了自动拉起。

Bash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
# ----------------------------------------------------
# 脚本功能:监控 Nginx 状态,发现挂掉则自动拉起并记录日志
# ----------------------------------------------------

# 定义日志路径
LOG_FILE="/var/log/nginx_monitor.log"

# 检测 Nginx 进程是否存在
# systemctl is-active nginx 也可以,这里用 ps 匹配更通用
if ! ps -ef | grep nginx | grep -v grep > /dev/null; then
# 记录当前时间到日志
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 警告:发现 Nginx 服务已挂,正在尝试重启..." >> $LOG_FILE

# 尝试拉起服务
systemctl start nginx

# 再次检查是否成功
if ps -ef | grep nginx | grep -v grep > /dev/null; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 成功:Nginx 服务已成功重启!" >> $LOG_FILE
else
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误:Nginx 重启失败,需要人工介入!" >> $LOG_FILE
fi
fi

3. Crontab 定时任务配置

输入 crontab -e 进入编辑:

  • 语法格式: 分 时 日 月 周 /path/to/command

  • 高频示例:

    • */5 * * * * /bin/bash /root/monitor.sh每隔 5 分钟执行一次监控脚本。

    • 0 2 * * * /bin/bash /data/backup.sh每天凌晨 2:00 执行备份脚本。

🧠 回忆快问快答(自测专用)

  1. 问: 手动执行脚本成功,但放进 crontab 定时任务里就不执行或报错,为什么?

    • 答: 环境变量/绝对路径问题crontab 执行时的环境变量非常干净。解决方法:脚本里的命令一律用绝对路径(如 /usr/bin/tar),或者在脚本开头加上 source /etc/profile

📌 模块四:Docker 容器技术(微服务必备)

1. 核心概念记忆

  • 镜像 (Image): 静态的只读模板(相当于类,或者软件安装包)。

  • 容器 (Container): 镜像运行后的实例(相当于对象,或者跑起来的软件)。容器之间是相互隔离的。

2. 高频必会命令

  • 镜像管理:

    • docker pull nginx:alpine:从远程仓库拉取精简版 Nginx 镜像。

    • docker images:查看本地已有的镜像。

    • docker rmi 镜像ID:删除本地镜像。

  • 容器生命周期管理:

    • docker run -d --name my_web -p 8080:80 -v /data/html:/usr/share/nginx/html nginx

      • -d:后台运行。

      • --name:指定容器名为 my_web

      • -p 8080:80:将宿主机的 8080 端口映射到容器内部的 80 端口。

      • -v:把宿主机的目录挂载到容器内部(数据持久化,修改宿主机文件容器内立即生效)。

    • docker ps:查看当前正在运行的容器。

    • docker ps -a:查看所有容器(包括已停止的)。

    • docker stop/start/restart 容器ID或名称:停止/启动/重启容器。

    • docker rm -f 容器ID:强制删除正在运行的容器。

  • 容器排查二板斧(入职天天用):

    • docker logs -f --tail 100 容器名:查看某个容器的最后 100 行日志并持续滚动。

    • docker exec -it 容器名 /bin/bash(或 /bin/sh):进入容器内部的黑窗口进行操作。

📌 模块五:MySQL 数据库管理(数据命脉)

1. 高频 SQL 增删改查基操

  • 连接数据库:mysql -u root -p

  • 查库:SHOW DATABASES;

  • 用库:USE demo_db;

  • 查表数据:SELECT * FROM users WHERE status = 1 ORDER BY create_time DESC LIMIT 10;

  • 更新数据:UPDATE users SET status = 0 WHERE id = 5;生产环境修改数据一定要带 WHERE 条件!

2. 数据备份与恢复

  • 物理/逻辑备份(使用 mysqldump):

    • 备份整个数据库:mysqldump -u root -p demo_db > /data/backup/demo_db_$(date +%F).sql
  • 数据恢复:

    • mysql -u root -p demo_db < /data/backup/demo_db_2026-06-11.sql

3. 主从复制基本原理(面试必问)

  • 核心逻辑:Binlog(二进制日志) 实现。

    1. 主库(Master):把所有修改数据库的语句记录到 Binlog 中。

    2. 从库(Slave):通过 I/O 线程 连接主库,读取 Binlog 并写入到本地的 Relay Log(中继日志) 中。

    3. 从库(Slave):通过 SQL 线程 读取 Relay Log,把里面的 SQL 语句在本地重新执行一遍(重放),从而保持数据一致。

📌 模块六:网络协议与排查(底层支撑)

1. 核心状态码与网络工具

  • 常见 HTTP 状态码:

    • 200 OK:成功。

    • 301/302:永久/临时重定向。

    • 403 Forbidden:服务器拒绝请求(通常是权限问题)。

    • 404 Not Found:找不到资源(路径写错了)。

    • 502 Bad Gateway:网关错误(后端服务挂了)。

    • 504 Gateway Timeout:网关超时(后端处理太慢,Nginx 等不及了)。

  • 网络排查常用工具:

    • ping 114.114.114.114:测试网络连通性。

    • telnet 192.168.1.10 3306(极其高频) 测试某台服务器的某个端口是否开放、是否能连通。

    • curl -I https://www.google.com:仅查看网站返回的 HTTP 响应头状态码。

    • netstat -tplnss -tpln:查看当前系统本地开启了哪些端口,分别被哪些进程占用了。