🐧 第01课:Linux基础

📚 核心概念

🎯 什么是Linux?

Linux是一套自由和开放源码的类Unix操作系统,诞生于1991年,由Linus Torvalds创建。它是现代互联网基础设施的基石——全球Top100万网站中96.3%运行在Linux上,Android手机、智能电视、路由器、云服务器几乎全部基于Linux内核。

🏛️ Linux系统架构

┌─────────────────────────────────────┐
│          用户空间 (User Space)        │
│  ┌─────┐ ┌─────┐ ┌─────┐ ┌──────┐  │
│  │ GUI │ │ CLI │ │ App │ │ Libs │  │
│  └──┬──┘ └──┬──┘ └──┬──┘ └──┬───┘  │
│     └────────┼───────┼───────┘       │
│         ┌────▼────┐                  │
│         │  glibc  │                  │
│         └────┬────┘                  │
├──────────────┼───────────────────────┤
│          系统调用接口                  │
├──────────────┼───────────────────────┤
│          内核空间 (Kernel Space)      │
│  ┌───────┐ ┌───────┐ ┌───────┐      │
│  │ 进程  │ │ 内存  │ │ 文件  │      │
│  │ 管理  │ │ 管理  │ │ 系统  │      │
│  └───────┘ └───────┘ └───────┘      │
│  ┌───────┐ ┌───────┐ ┌───────┐      │
│  │ 网络  │ │ 设备  │ │ IPC   │      │
│  │ 协议栈│ │ 驱动  │ │ 机制  │      │
│  └───────┘ └───────┘ └───────┘      │
├─────────────────────────────────────┤
│          硬件抽象层 (HAL)             │
│  CPU | 内存 | 磁盘 | 网卡 | GPU      │
└─────────────────────────────────────┘

📦 Linux发行版选择

Linux内核本身只是操作系统的核心,发行版=D内核+工具链+包管理器+默认配置。选择发行版是DevOps工程师的第一步:

🔴 RHEL/CentOS/AlmaLinux

🟠 Ubuntu/Debian

🔵 Arch/Gentoo

🔌 SSH远程连接

作为DevOps工程师,99%的时间你通过SSH远程操作服务器。SSH(Secure Shell)是加密的网络协议,替代了不安全的Telnet。

⌨️ 命令实操

⌨️ 实操命令

1. 系统信息查看 ✅

系统信息
# 查看内核版本
uname -r
# 输出示例: 5.15.0-91-generic

# 查看完整系统信息
uname -a
# Linux devops-lab 5.15.0-91-generic #101-Ubuntu SMP x86_64 GNU/Linux

# 查看发行版信息
cat /etc/os-release
# NAME="Ubuntu"
# VERSION="22.04.3 LTS (Jammy Jellyfish)"
# ID=ubuntu
# PRETTY_NAME="Ubuntu 22.04.3 LTS"

# 查看CPU信息
lscpu | head -20
# Architecture:            x86_64
# CPU(s):                  4
# Model name:              Intel(R) Xeon(R) CPU

# 查看内存
free -h
#               total        used        free
# Mem:          7.8Gi       2.1Gi       4.2Gi
# Swap:         2.0Gi          0B       2.0Gi

2. 用户与权限管理 ✅

用户管理
# 创建新用户(DevOps最佳实践:不用root)
sudo useradd -m -s /bin/bash devops
sudo passwd devops

# 添加sudo权限
sudo usermod -aG sudo devops

# 切换用户
su - devops

# 查看当前用户信息
whoami    # devops
id        # uid=1001(devops) gid=1001(devops) groups=1001(devops),27(sudo)

# 查看登录历史
last -5
# devops   pts/0   192.168.1.100   Tue May 19 10:30   still logged in

3. SSH密钥认证配置 ✅

SSH配置
# 生成SSH密钥对(Ed25519算法,更安全更快)
ssh-keygen -t ed25519 -C "devops@company.com"
# Generating public/private ed25519 key pair.
# Your identification has been saved in /home/devops/.ssh/id_ed25519

# 查看公钥
cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAC3Nza... devops@company.com

# 复制公钥到远程服务器
ssh-copy-id devops@192.168.1.100

# SSH安全配置
sudo vi /etc/ssh/sshd_config
# 修改以下配置:
# Port 2222                    # 修改默认端口
# PermitRootLogin no           # 禁止root登录
# PasswordAuthentication no    # 禁用密码认证
# MaxAuthTries 3               # 限制尝试次数

# 重启SSH服务
sudo systemctl restart sshd

# 使用配置连接
ssh -p 2222 devops@192.168.1.100

4. 包管理与服务管理 ✅

包与服务
# Ubuntu/Debian 包管理
sudo apt update              # 更新索引
sudo apt upgrade -y          # 升级所有包
sudo apt install nginx -y    # 安装nginx
apt list --upgradable        # 查看可升级包
dpkg -l | grep nginx         # 查看已安装包

# CentOS/RHEL 包管理
sudo dnf check-update
sudo dnf install nginx -y
rpm -qa | grep nginx

# systemd服务管理
sudo systemctl start nginx    # 启动
sudo systemctl stop nginx     # 停止
sudo systemctl restart nginx  # 重启
sudo systemctl enable nginx   # 开机自启
sudo systemctl status nginx   # 查看状态

# 查看所有正在运行的服务
systemctl list-units --type=service --state=running

5. SSH Config高级配置 ✅

SSH Config
# 创建SSH配置文件
mkdir -p ~/.ssh && chmod 700 ~/.ssh
cat > ~/.ssh/config << 'EOF'
# 生产环境
Host prod
    HostName 10.0.1.100
    User devops
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ServerAliveCountMax 3

# 测试环境
Host staging
    HostName 10.0.2.100
    User devops
    Port 22
    IdentityFile ~/.ssh/id_ed25519

# 跳板机配置
Host bastion
    HostName 203.0.113.10
    User jump
    IdentityFile ~/.ssh/jump_key

Host internal-*
    ProxyJump bastion
    User devops
EOF

chmod 600 ~/.ssh/config

# 现在可以直接使用别名连接
ssh prod        # 等同于 ssh -p 2222 devops@10.0.1.100
ssh staging     # 等同于 ssh devops@10.0.2.100

📐 架构图

📐 架构图:DevOps工程师的Linux工作流

                        ┌─────────────┐
                        │  开发者笔记本  │
                        │  (macOS/WSL) │
                        └──────┬───────┘
                               │ SSH (密钥认证)
                               ▼
                    ┌─────────────────────┐
                    │    跳板机/Bastion    │
                    │   (安全入口点)       │
                    └──────────┬──────────┘
                               │ SSH ProxyJump
                ┌──────────────┼──────────────┐
                ▼              ▼              ▼
         ┌──────────┐  ┌──────────┐  ┌──────────┐
         │ 生产集群  │  │ 测试环境  │  │ CI/CD    │
         │          │  │          │  │ Runner   │
         │ ┌──────┐ │  │ ┌──────┐ │  │ ┌──────┐ │
         │ │ Nginx│ │  │ │ App  │ │  │ │ Build│ │
         │ ├──────┤ │  │ ├──────┤ │  │ ├──────┤ │
         │ │ App  │ │  │ │ DB   │ │  │ │ Test │ │
         │ ├──────┤ │  │ └──────┘ │  │ └──────┘ │
         │ │ DB   │ │  └──────────┘  └──────────┘
         │ └──────┘ │
         └──────────┘

🔐 安全架构:SSH密钥认证流程

  客户端                              服务器
  ┌──────┐                        ┌──────┐
  │ 私钥  │    1. 请求连接          │ 公钥  │
  │(id_   │──────────────────────▶│      │
  │ed25519)│   2. 服务器发随机挑战  │      │
  │      │◀──────────────────────│      │
  │      │   3. 私钥签名挑战      │      │
  │      │──────────────────────▶│      │
  │      │   4. 公钥验证签名      │      │
  │      │                       │ 验证  │
  │      │   5. 认证成功/失败     │ 通过✅ │
  │      │◀──────────────────────│      │
  └──────┘                        └──────┘

🔧 故障排查

🔧 故障排查

❌ 问题1:SSH连接超时

# 1. 检查网络连通性
ping -c 3 192.168.1.100
# 如果ping不通 → 检查防火墙/网络路由

# 2. 检查端口是否开放
telnet 192.168.1.100 22
# 或使用nc
nc -zv 192.168.1.100 22
# Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!

# 3. 检查SSH服务是否运行
sudo systemctl status sshd

# 4. 查看SSH日志
sudo journalctl -u sshd --since "1 hour ago"

# 5. 使用详细模式调试
ssh -vvv devops@192.168.1.100

💡 常见原因:防火墙阻断、SSH服务未启动、IP变更、DNS解析失败

❌ 问题2:Permission denied (publickey)

# 1. 检查密钥权限(最常见问题)
ls -la ~/.ssh/
# 正确权限:
# -rw-------  id_ed25519      (600)
# -rw-r--r--  id_ed25519.pub  (644)
# -rw-------  authorized_keys (600)
# drwx------  .ssh/           (700)

# 2. 修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys

# 3. 确认公钥已添加到服务器
ssh devops@host "cat ~/.ssh/authorized_keys" | grep -c "$(cat ~/.ssh/id_ed25519.pub)"
# 输出1表示已添加

# 4. 检查sshd配置是否允许密钥认证
sudo grep PubkeyAuthentication /etc/ssh/sshd_config
# 应该是: PubkeyAuthentication yes

❌ 问题3:sudo: command not found

# 某些最小化安装没有sudo
# 解决:用root安装sudo
su -
apt install sudo -y     # Debian/Ubuntu
dnf install sudo -y     # RHEL/CentOS

# 或者直接编辑sudoers
visudo
# 添加: devops ALL=(ALL:ALL) ALL

🏆 成就解锁:Linux新手村毕业!

掌握Linux系统架构、发行版选择、SSH密钥认证、用户管理、包管理和服务管理——这是DevOps工程师的基石技能。