主题
第一部分 Linux 基础与运维入门
本部分是整本教材的根基。Kubernetes 运行在 Linux 之上,作为一名 K8s 运维工程师,必须熟练掌握 Linux 系统管理、网络基础和故障排查方法。
第 1 章 Linux 操作系统基础
1.1 什么是 Linux
Linux 是一种自由和开放源码的类 Unix 操作系统。它由林纳斯·托瓦兹(Linus Torvalds)于 1991 年首次发布。
Linux 系统由以下部分组成:
- Kernel(内核):管理硬件资源,提供系统调用接口
- Shell:用户与内核交互的命令行界面
- 文件系统:组织和管理文件
- 应用程序:用户使用的各种软件
1.2 Linux 发行版
常见发行版:
| 发行版 | 特点 | 适用场景 |
|---|---|---|
| Ubuntu | 社区活跃,文档丰富 | 个人学习、开发、云服务器 |
| CentOS/Rocky/AlmaLinux | 稳定,企业常用 | 企业服务器 |
| Debian | 稳定,软件包丰富 | 服务器、嵌入式 |
| SUSE | 企业级支持 | 大型企业 |
推荐学习使用 Ubuntu Server 22.04/24.04 或 Rocky Linux 9。
1.3 Linux 目录结构
/ 根目录
├── /bin 基本用户命令
├── /sbin 系统管理命令
├── /etc 配置文件
├── /home 普通用户主目录
├── /root root 用户主目录
├── /var 可变数据(日志、缓存)
├── /tmp 临时文件
├── /usr 用户程序和文件
├── /opt 可选应用软件
├── /proc 虚拟文件系统,进程信息
├── /sys 虚拟文件系统,系统信息
├── /dev 设备文件
├── /mnt 临时挂载点
└── /lib 共享库1.4 基本命令
文件和目录操作
bash
# 查看当前目录
pwd
# 列出目录内容
ls
ls -l # 详细列表
ls -la # 包含隐藏文件
ls -lh # 人类可读大小
# 切换目录
cd /etc
cd ~ # 回到家目录
cd - # 回到上一个目录
# 创建目录
mkdir mydir
mkdir -p a/b/c
# 创建文件
touch file.txt
# 复制、移动、删除
cp file.txt file2.txt
cp -r dir1 dir2
mv file.txt /tmp/
rm file.txt
rm -rf dir/ # 谨慎使用!
# 查看文件内容
cat file.txt
head -20 file.txt
tail -20 file.txt
tail -f /var/log/syslog # 实时查看日志
less file.txt文件权限
bash
# 查看权限
ls -l file.txt
# -rw-r--r-- 1 user group 1234 Jul 19 10:00 file.txt
# ^^^ ^^^ ^^^
# 所有者 组 其他用户
# 修改权限
chmod 755 script.sh
chmod u+x script.sh
# 修改所有者
sudo chown user:group file.txt
# 权限数字对应
# r=4, w=2, x=1
# 755 = rwxr-xr-x
# 644 = rw-r--r--用户和组管理
bash
# 添加用户
sudo useradd -m -s /bin/bash alice
sudo passwd alice
# 添加用户到 sudo 组
sudo usermod -aG sudo alice
# 切换用户
su - alice
# 查看当前用户
whoami
id
# 添加组
sudo groupadd developers
sudo usermod -aG developers alice1.5 包管理
Ubuntu/Debian(apt)
bash
sudo apt update # 更新软件包列表
sudo apt upgrade -y # 升级已安装软件
sudo apt install nginx # 安装软件
sudo apt remove nginx # 卸载软件
sudo apt autoremove # 清理不需要的依赖
sudo apt search nginx # 搜索软件包Rocky/CentOS(dnf/yum)
bash
sudo dnf update
sudo dnf install nginx
sudo dnf remove nginx
sudo dnf search nginx1.6 进程管理
bash
# 查看进程
ps aux
ps -ef | grep nginx
# 实时查看
htop
top
# 终止进程
kill PID
kill -9 PID # 强制终止
killall nginx # 按名称终止
# 后台运行
nohup ./script.sh &
# 查看后台任务
jobs
fg %1
bg %11.7 本章实验
实验 1-1:熟悉 Linux 目录结构
bash
# 1. 登录系统后,查看当前目录
pwd
# 2. 列出根目录下所有目录
ls /
# 3. 进入 /etc 目录,查看配置文件
ls /etc | head -20
# 4. 查看 /var/log 下的日志文件
ls -lh /var/log实验 1-2:用户和权限管理
bash
# 1. 创建一个练习用户
sudo useradd -m -s /bin/bash k8s-student
sudo passwd k8s-student
# 2. 创建目录并设置权限
sudo mkdir /opt/k8s-practice
sudo chown k8s-student:k8s-student /opt/k8s-practice
sudo chmod 755 /opt/k8s-practice
# 3. 切换到练习用户,创建文件
su - k8s-student
cd /opt/k8s-practice
touch test.txt
echo "Hello K8s" > test.txt
ls -l test.txt1.8 本章练习
- 解释
/etc、/var、/proc、/home目录的作用。 - 使用
chmod命令将script.sh设置为所有者可读写执行,其他人只读。 - 使用
apt或dnf安装vim、git、curl三个软件。 - 使用
ps和grep找到系统中运行的 sshd 进程。
第 2 章 Linux 系统管理
2.1 磁盘和文件系统
查看磁盘使用情况
bash
# 查看磁盘分区
lsblk
fdisk -l
# 查看磁盘使用情况
df -h
# 查看目录大小
du -sh /var/log
du -h --max-depth=1 /opt文件系统类型
| 文件系统 | 特点 |
|---|---|
| ext4 | Linux 最常用的文件系统 |
| xfs | 高性能,适合大文件 |
| btrfs | 现代文件系统,支持快照 |
| tmpfs | 内存文件系统 |
挂载磁盘
bash
# 查看当前挂载
mount
# 临时挂载
sudo mount /dev/sdb1 /mnt/data
# 永久挂载(编辑 /etc/fstab)
/dev/sdb1 /mnt/data ext4 defaults 0 0
# 挂载所有配置
sudo mount -a2.2 内存管理
bash
# 查看内存使用情况
free -h
# 查看内存详细信息
cat /proc/meminfo
# 查看进程内存使用
ps aux --sort=-%mem | head -102.3 CPU 管理
bash
# 查看 CPU 信息
lscpu
cat /proc/cpuinfo
# 查看 CPU 负载
uptime
# 查看进程 CPU 使用
ps aux --sort=-%cpu | head -102.4 定时任务(cron)
bash
# 编辑当前用户的 crontab
crontab -e
# 查看 crontab
crontab -l
# 系统级定时任务
ls /etc/cron.d/
cat /etc/crontabcron 表达式格式:
分 时 日 月 星期 命令
0 2 * * * /usr/local/bin/backup.sh # 每天凌晨 2 点执行
*/5 * * * * /usr/local/bin/check.sh # 每 5 分钟执行2.5 systemd 服务管理
现代 Linux 使用 systemd 作为初始化系统和服务管理器。
bash
# 启动服务
sudo systemctl start nginx
# 停止服务
sudo systemctl stop nginx
# 重启服务
sudo systemctl restart nginx
# 查看状态
sudo systemctl status nginx
# 设置开机自启
sudo systemctl enable nginx
# 禁用开机自启
sudo systemctl disable nginx
# 查看日志
sudo journalctl -u nginx
sudo journalctl -u nginx -f # 实时日志
sudo journalctl -u nginx --since "1 hour ago"2.6 SSH 远程管理
bash
# 连接到远程服务器
ssh user@192.168.1.100
ssh -p 2222 user@192.168.1.100
# 使用密钥登录
ssh-keygen -t rsa -b 4096
ssh-copy-id user@192.168.1.100
# 配置文件 ~/.ssh/config
Host k8s-node1
HostName 192.168.1.101
User ubuntu
IdentityFile ~/.ssh/id_rsa2.7 本章实验
实验 2-1:磁盘和内存监控脚本
bash
#!/bin/bash
# /usr/local/bin/sys-check.sh
echo "=== 磁盘使用情况 ==="
df -h
echo "=== 内存使用情况 ==="
free -h
echo "=== CPU 负载 ==="
uptime
echo "=== 内存占用 Top 5 ==="
ps aux --sort=-%mem | head -6
echo "=== CPU 占用 Top 5 ==="
ps aux --sort=-%cpu | head -6bash
chmod +x /usr/local/bin/sys-check.sh
/usr/local/bin/sys-check.sh实验 2-2:配置定时任务
bash
# 每 10 分钟执行一次系统检查
crontab -e
# 添加:
*/10 * * * * /usr/local/bin/sys-check.sh >> /var/log/sys-check.log 2>&12.8 本章练习
- 使用
df -h查看根分区使用率,使用du找出/var下最大的目录。 - 编写一个脚本,每天凌晨 3 点清理
/tmp下 7 天前的文件。 - 使用
systemctl管理 nginx 服务,观察journalctl日志输出。 - 生成 SSH 密钥并配置免密登录到另一台服务器。
第 3 章 Linux 网络基础
3.1 网络基础概念
- IP 地址:设备在网络中的标识
- 子网掩码:划分网络位和主机位
- 网关:连接不同网络的设备
- DNS:域名解析服务
- MAC 地址:网卡物理地址
- 端口:区分同一 IP 上的不同服务
3.2 常用网络命令
bash
# 查看 IP 地址
ip addr
ip a
# 传统命令
ifconfig
# 查看路由表
ip route
route -n
# 测试网络连通性
ping baidu.com
# 查看 DNS 解析
nslookup baidu.com
dig baidu.com
# 查看端口监听
ss -tlnp
netstat -tlnp
# 测试端口连通性
curl -v http://192.168.1.100:80
telnet 192.168.1.100 80
nc -zv 192.168.1.100 803.3 网络配置文件
Ubuntu 22.04+ 使用 Netplan:
yaml
# /etc/netplan/00-installer-config.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114bash
sudo netplan apply3.4 DNS 详解
bash
# 本地 DNS 解析
/etc/hosts
# DNS 配置文件
/etc/resolv.conf
# 查看 DNS 解析过程
dig +trace baidu.com常见 DNS 记录类型:
| 记录类型 | 说明 |
|---|---|
| A | 域名到 IPv4 地址 |
| AAAA | 域名到 IPv6 地址 |
| CNAME | 域名别名 |
| MX | 邮件交换记录 |
| TXT | 文本记录 |
| NS | 域名服务器 |
3.5 证书基础
SSL/TLS 证书用于加密通信。
bash
# 查看证书信息
openssl s_client -connect baidu.com:443 -servername baidu.com </dev/null
# 生成自签名证书
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
# 查看证书内容
openssl x509 -in cert.pem -text -noout3.6 防火墙基础
iptables
bash
# 查看规则
sudo iptables -L -n -v
# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 默认拒绝
sudo iptables -P INPUT DROPfirewalld(RHEL/CentOS/Rocky)
bash
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reloadufw(Ubuntu)
bash
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status3.7 本章实验
实验 3-1:网络诊断
bash
# 1. 查看本机 IP 和路由
ip a
ip route
# 2. 测试外网连通性
ping -c 4 baidu.com
# 3. 查看 DNS 解析
nslookup baidu.com
# 4. 查看本机监听端口
ss -tlnp
# 5. 测试远程端口
curl -I https://www.baidu.com实验 3-2:证书生成与验证
bash
# 生成自签名证书
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=localhost"
# 使用 Python 启动 HTTPS 服务
python3 -m http.server 8443 --bind 0.0.0.0 &
# 或者用 nginx 配置证书
# 验证证书
openssl s_client -connect localhost:8443 </dev/null3.8 本章练习
- 解释 IP 地址、子网掩码、网关、DNS 的作用。
- 使用
ss命令查看本机监听的 80、443、22 端口。 - 配置静态 IP 地址(Netplan 或 nmtui)。
- 生成一个自签名证书,并用
openssl s_client验证。
第 4 章 Linux 故障排查实战
4.1 故障排查方法论
推荐的排查思路:
- 收集信息:查看日志、监控、用户反馈
- 定位范围:是硬件、系统、网络、应用哪个层面
- 缩小范围:分层排查,从外到内
- 验证假设:用命令验证每个猜测
- 解决问题:修复并验证
- 复盘总结:记录根因和解决方案
4.2 CPU 问题排查
bash
# 查看整体负载
uptime
cat /proc/loadavg
# 查看 CPU 使用详情
top
htop
# 找到 CPU 占用高的进程
ps aux --sort=-%cpu | head -10
# 查看进程线程
ps -eLf | grep PID
# 查看进程的 CPU 时间
cat /proc/PID/stat4.3 内存问题排查
bash
# 查看内存使用
free -h
vmstat 1 10
# 查看 OOM 日志
dmesg | grep -i "out of memory"
journalctl -k | grep -i "out of memory"
# 找到内存占用高的进程
ps aux --sort=-%mem | head -10
# 查看进程内存映射
pmap PID4.4 磁盘问题排查
bash
# 查看磁盘空间
df -h
# 查看 inode 使用情况
df -i
# 查找大文件
du -ah / | sort -rh | head -20
# 查找超过 100MB 的文件
find / -type f -size +100M -exec ls -lh {} \;
# 查看磁盘 I/O
iostat -xz 1
iotop
# 查看磁盘健康
smartctl -a /dev/sda4.5 网络问题排查
bash
# 分层排查
# 1. 物理层:网线、网卡
ip link show
ethtool eth0
# 2. 网络层:IP、路由
ip a
ip route
ping 网关
# 3. 传输层:端口、连接
ss -tlnp
nc -zv IP PORT
# 4. 应用层:服务、DNS
curl -v URL
nslookup 域名4.6 进程和文件系统问题
bash
# 进程不存在但端口被占用
lsof -i :8080
fuser -k 8080/tcp
# 僵尸进程
ps aux | grep 'Z'
# 文件被删除但空间未释放
lsof | grep deleted
# 权限问题
ls -la
getfacl file.txt4.7 日志分析
bash
# 系统日志
/var/log/syslog # Ubuntu
/var/log/messages # CentOS/Rocky
# 安全日志
/var/log/auth.log
/var/log/secure
# 使用 journalctl
journalctl -xe
journalctl -u nginx --since "10 minutes ago"
journalctl -p err4.8 本章实战案例
案例 4-1:服务器负载高
现象:uptime 显示 load average 很高。
排查步骤:
bash
# 1. 查看 CPU 和内存
top
# 2. 找到占用高的进程
ps aux --sort=-%cpu | head -10
# 3. 查看进程详细信息
pidstat -u -p PID 1
# 4. 查看进程打开的文件
lsof -p PID
# 5. 查看进程日志
journalctl -u 服务名案例 4-2:磁盘空间满
现象:应用无法写入,报错 "No space left on device"。
排查步骤:
bash
# 1. 查看磁盘使用
df -h
# 2. 查看 inode
df -i
# 3. 查找大文件
du -sh /* 2>/dev/null | sort -rh | head -20
# 4. 查找日志文件
find /var/log -type f -size +100M
# 5. 查找被删除但未释放的文件
lsof +L1案例 4-3:服务无法访问
现象:浏览器无法访问 Web 服务。
排查步骤:
bash
# 1. 本机服务是否运行
systemctl status nginx
# 2. 本机端口是否监听
ss -tlnp | grep 80
# 3. 本机是否能访问
curl -I http://127.0.0.1
# 4. 防火墙是否放行
sudo iptables -L -n | grep 80
# 5. 网络是否连通
ping 网关
# 6. DNS 是否正常
nslookup 域名4.9 本章练习
- 模拟 CPU 高负载(使用
stress工具),练习排查过程。 - 创建一个填满磁盘的大文件,练习磁盘空间排查。
- 停止一个服务并尝试访问,练习服务不可用排查。
- 使用
journalctl查看过去 1 小时的错误日志。
第一阶段总结
完成本阶段学习后,你应该能够:
- 熟练使用 Linux 常用命令
- 管理用户、权限、软件包、服务
- 配置网络和 DNS
- 排查 CPU、内存、磁盘、网络、进程常见问题
- 编写简单的系统监控脚本
进入下一阶段:云计算基础。