Skip to content

第一部分 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 alice

1.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 nginx

1.6 进程管理

bash
# 查看进程
ps aux
ps -ef | grep nginx

# 实时查看
htop
top

# 终止进程
kill PID
kill -9 PID       # 强制终止
killall nginx     # 按名称终止

# 后台运行
nohup ./script.sh &

# 查看后台任务
jobs
fg %1
bg %1

1.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.txt

1.8 本章练习

  1. 解释 /etc/var/proc/home 目录的作用。
  2. 使用 chmod 命令将 script.sh 设置为所有者可读写执行,其他人只读。
  3. 使用 aptdnf 安装 vimgitcurl 三个软件。
  4. 使用 psgrep 找到系统中运行的 sshd 进程。

第 2 章 Linux 系统管理

2.1 磁盘和文件系统

查看磁盘使用情况

bash
# 查看磁盘分区
lsblk
fdisk -l

# 查看磁盘使用情况
df -h

# 查看目录大小
du -sh /var/log
 du -h --max-depth=1 /opt

文件系统类型

文件系统特点
ext4Linux 最常用的文件系统
xfs高性能,适合大文件
btrfs现代文件系统,支持快照
tmpfs内存文件系统

挂载磁盘

bash
# 查看当前挂载
mount

# 临时挂载
sudo mount /dev/sdb1 /mnt/data

# 永久挂载(编辑 /etc/fstab)
/dev/sdb1 /mnt/data ext4 defaults 0 0

# 挂载所有配置
sudo mount -a

2.2 内存管理

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

# 查看内存详细信息
cat /proc/meminfo

# 查看进程内存使用
ps aux --sort=-%mem | head -10

2.3 CPU 管理

bash
# 查看 CPU 信息
lscpu
cat /proc/cpuinfo

# 查看 CPU 负载
uptime

# 查看进程 CPU 使用
ps aux --sort=-%cpu | head -10

2.4 定时任务(cron)

bash
# 编辑当前用户的 crontab
crontab -e

# 查看 crontab
crontab -l

# 系统级定时任务
ls /etc/cron.d/
cat /etc/crontab

cron 表达式格式:

分 时 日 月 星期 命令
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_rsa

2.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 -6
bash
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>&1

2.8 本章练习

  1. 使用 df -h 查看根分区使用率,使用 du 找出 /var 下最大的目录。
  2. 编写一个脚本,每天凌晨 3 点清理 /tmp 下 7 天前的文件。
  3. 使用 systemctl 管理 nginx 服务,观察 journalctl 日志输出。
  4. 生成 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 80

3.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.114
bash
sudo netplan apply

3.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 -noout

3.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 DROP

firewalld(RHEL/CentOS/Rocky)

bash
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

ufw(Ubuntu)

bash
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status

3.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/null

3.8 本章练习

  1. 解释 IP 地址、子网掩码、网关、DNS 的作用。
  2. 使用 ss 命令查看本机监听的 80、443、22 端口。
  3. 配置静态 IP 地址(Netplan 或 nmtui)。
  4. 生成一个自签名证书,并用 openssl s_client 验证。

第 4 章 Linux 故障排查实战

4.1 故障排查方法论

推荐的排查思路:

  1. 收集信息:查看日志、监控、用户反馈
  2. 定位范围:是硬件、系统、网络、应用哪个层面
  3. 缩小范围:分层排查,从外到内
  4. 验证假设:用命令验证每个猜测
  5. 解决问题:修复并验证
  6. 复盘总结:记录根因和解决方案

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/stat

4.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 PID

4.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/sda

4.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.txt

4.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 err

4.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 本章练习

  1. 模拟 CPU 高负载(使用 stress 工具),练习排查过程。
  2. 创建一个填满磁盘的大文件,练习磁盘空间排查。
  3. 停止一个服务并尝试访问,练习服务不可用排查。
  4. 使用 journalctl 查看过去 1 小时的错误日志。

第一阶段总结

完成本阶段学习后,你应该能够:

  • 熟练使用 Linux 常用命令
  • 管理用户、权限、软件包、服务
  • 配置网络和 DNS
  • 排查 CPU、内存、磁盘、网络、进程常见问题
  • 编写简单的系统监控脚本

进入下一阶段:云计算基础