【学习路线】Linux从入门到精通:系统化学习路线指南

Linux从入门到精通:系统化学习路线指南

前言

Linux作为开源操作系统的代表,在服务器、云计算、容器化、嵌入式系统等领域占据主导地位。掌握Linux技能不仅是运维工程师的必备技能,也是开发者、架构师等技术岗位的重要加分项。本文将为你提供一个系统化的Linux学习路线,帮助你从零基础成长为Linux专家。

学习前的准备

硬件环境准备

  • 物理机或虚拟机:推荐使用VMware、VirtualBox或云服务器
  • 内存要求:至少2GB RAM,推荐4GB以上
  • 存储空间:至少20GB可用空间
  • 网络环境:稳定的网络连接用于软件包下载

发行版选择建议

  • 初学者推荐:Ubuntu Desktop(用户友好)
  • 服务器学习:CentOS/RHEL、Ubuntu Server
  • 进阶学习:Debian、Arch Linux
  • 企业环境:Red Hat Enterprise Linux、SUSE

第一阶段:Linux基础入门(1-2个月)

1.1 Linux系统概述

核心概念理解
  • 开源软件理念:自由软件与开源许可证
  • Linux发行版:内核与发行版的关系
  • 系统架构:硬件层、内核层、Shell层、应用层
  • 多用户多任务:Linux的核心特性
安装与配置
# 查看系统信息
uname -a                    # 系统内核信息
lsb_release -a             # 发行版信息
cat /etc/os-release        # 系统版本详情
hostnamectl                # 主机名和系统信息

# 基本系统配置
sudo hostnamectl set-hostname new-hostname  # 设置主机名
timedatectl                # 查看时间设置
sudo timedatectl set-timezone Asia/Shanghai # 设置时区

1.2 文件系统与目录结构

Linux目录树结构
/                          # 根目录
├── bin/                   # 基本命令二进制文件
├── boot/                  # 启动文件
├── dev/                   # 设备文件
├── etc/                   # 系统配置文件
├── home/                  # 用户主目录
├── lib/                   # 系统库文件
├── media/                 # 可移动媒体挂载点
├── mnt/                   # 临时挂载点
├── opt/                   # 可选软件包
├── proc/                  # 进程信息虚拟文件系统
├── root/                  # root用户主目录
├── run/                   # 运行时数据
├── sbin/                  # 系统管理命令
├── srv/                   # 服务数据
├── sys/                   # 系统信息虚拟文件系统
├── tmp/                   # 临时文件
├── usr/                   # 用户程序
└── var/                   # 变量数据
文件类型与权限
# 文件类型识别
ls -la                     # 详细列出文件信息
file filename              # 查看文件类型
stat filename              # 查看文件详细状态

# 权限管理
chmod 755 filename         # 修改文件权限
chmod u+x filename         # 给所有者添加执行权限
chown user:group filename  # 修改文件所有者
chgrp group filename       # 修改文件所属组

# 权限含义
# r(4) - 读权限
# w(2) - 写权限  
# x(1) - 执行权限
# 755 = rwxr-xr-x (所有者读写执行,组和其他用户读执行)

1.3 基础命令操作

文件与目录操作
# 导航命令
pwd                        # 显示当前目录
cd /path/to/directory      # 切换目录
cd ~                       # 切换到用户主目录
cd -                       # 切换到上一个目录

# 文件操作
ls -la                     # 列出文件详细信息
cp source destination      # 复制文件
mv source destination      # 移动/重命名文件
rm filename               # 删除文件
rm -rf directory          # 强制删除目录
mkdir -p /path/to/dir     # 创建目录(包括父目录)
rmdir directory           # 删除空目录

# 文件查看
cat filename              # 显示文件内容
less filename             # 分页查看文件
head -n 10 filename       # 查看文件前10行
tail -f filename          # 实时查看文件末尾
grep "pattern" filename   # 搜索文件内容
文本处理工具
# 基础文本处理
grep -r "pattern" /path   # 递归搜索
grep -i "pattern" file    # 忽略大小写搜索
grep -v "pattern" file    # 反向搜索(不包含pattern的行)

# 文本统计
wc -l filename            # 统计行数
wc -w filename            # 统计单词数
wc -c filename            # 统计字符数

# 文本排序和去重
sort filename             # 排序文件内容
sort -n filename          # 按数字排序
uniq filename             # 去除重复行
sort filename | uniq      # 排序后去重

1.4 进程与系统监控

进程管理
# 查看进程
ps aux                    # 查看所有进程
ps -ef                    # 另一种格式查看进程
top                       # 实时查看进程
htop                      # 增强版top(需要安装)
pgrep process_name        # 根据名称查找进程ID

# 进程控制
kill PID                  # 终止进程
kill -9 PID              # 强制终止进程
killall process_name      # 根据名称终止进程
nohup command &           # 后台运行命令
jobs                      # 查看后台任务
fg %1                     # 将后台任务调到前台
系统资源监控
# 系统资源查看
free -h                   # 查看内存使用情况
df -h                     # 查看磁盘使用情况
du -sh /path              # 查看目录大小
lscpu                     # 查看CPU信息
lsblk                     # 查看块设备信息
lsusb                     # 查看USB设备
lspci                     # 查看PCI设备

第二阶段:系统管理基础(2-3个月)

2.1 用户与权限管理

用户管理
# 用户操作
sudo useradd -m username          # 创建用户并创建主目录
sudo passwd username              # 设置用户密码
sudo usermod -aG sudo username    # 将用户添加到sudo组
sudo userdel -r username          # 删除用户及其主目录
id username                       # 查看用户信息
whoami                           # 查看当前用户
who                              # 查看登录用户
w                                # 查看用户活动

# 组管理
sudo groupadd groupname          # 创建组
sudo groupdel groupname          # 删除组
groups username                  # 查看用户所属组
sudo usermod -G group1,group2 username  # 修改用户所属组
高级权限管理
# 特殊权限
chmod +s filename               # 设置SUID权限
chmod +t directory             # 设置粘滞位
chmod 4755 filename            # SUID权限(4000)
chmod 2755 directory           # SGID权限(2000)
chmod 1755 directory           # 粘滞位权限(1000)

# ACL权限(访问控制列表)
setfacl -m u:username:rwx filename    # 设置用户ACL权限
setfacl -m g:groupname:rx filename    # 设置组ACL权限
getfacl filename                      # 查看ACL权限
setfacl -x u:username filename        # 删除用户ACL权限

2.2 软件包管理

Debian/Ubuntu系统(APT)
# 软件包管理
sudo apt update                 # 更新软件包列表
sudo apt upgrade                # 升级已安装软件包
sudo apt install package_name  # 安装软件包
sudo apt remove package_name   # 卸载软件包
sudo apt purge package_name    # 完全卸载软件包(包括配置文件)
sudo apt autoremove            # 清理不需要的依赖包

# 软件包查询
apt search keyword             # 搜索软件包
apt show package_name          # 显示软件包信息
apt list --installed           # 列出已安装软件包
dpkg -l                        # 查看已安装软件包
dpkg -L package_name           # 查看软件包安装的文件
Red Hat/CentOS系统(YUM/DNF)
# YUM包管理(CentOS 7及以下)
sudo yum update                # 更新系统
sudo yum install package_name  # 安装软件包
sudo yum remove package_name   # 卸载软件包
yum search keyword             # 搜索软件包
yum info package_name          # 查看软件包信息
yum list installed             # 列出已安装软件包

# DNF包管理(CentOS 8+/Fedora)
sudo dnf update                # 更新系统
sudo dnf install package_name  # 安装软件包
sudo dnf remove package_name   # 卸载软件包
dnf search keyword             # 搜索软件包

2.3 服务管理(Systemd)

服务控制
# 服务管理
sudo systemctl start service_name     # 启动服务
sudo systemctl stop service_name      # 停止服务
sudo systemctl restart service_name   # 重启服务
sudo systemctl reload service_name    # 重新加载服务配置
sudo systemctl enable service_name    # 设置开机自启
sudo systemctl disable service_name   # 取消开机自启

# 服务状态查看
systemctl status service_name         # 查看服务状态
systemctl is-active service_name      # 检查服务是否运行
systemctl is-enabled service_name     # 检查服务是否开机自启
systemctl list-units --type=service   # 列出所有服务
自定义服务
# 创建自定义服务文件
sudo vim /etc/systemd/system/myapp.service

# 服务文件内容示例
[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=myuser
WorkingDirectory=/path/to/app
ExecStart=/path/to/app/start.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

# 重新加载systemd配置
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service

第三阶段:网络与安全管理(2-3个月)

3.1 网络配置与管理

网络基础配置
# 网络接口管理
ip addr show                   # 查看网络接口
ip link show                   # 查看网络链路状态
sudo ip addr add 192.168.1.100/24 dev eth0  # 添加IP地址
sudo ip route add default via 192.168.1.1   # 添加默认路由

# 传统网络工具
ifconfig                       # 查看网络接口(需要安装net-tools)
route -n                       # 查看路由表
netstat -tuln                  # 查看网络连接
ss -tuln                       # 现代版netstat
网络诊断工具
# 连通性测试
ping -c 4 google.com          # 测试网络连通性
traceroute google.com         # 跟踪路由路径
mtr google.com                # 结合ping和traceroute

# DNS诊断
nslookup google.com           # DNS查询
dig google.com                # 详细DNS查询
dig @8.8.8.8 google.com       # 指定DNS服务器查询

# 端口扫描
nmap -p 80,443 target_host    # 扫描指定端口
nmap -sS target_host          # SYN扫描
telnet host port              # 测试端口连通性

3.2 防火墙配置

UFW防火墙(Ubuntu)
# UFW基本操作
sudo ufw enable               # 启用防火墙
sudo ufw disable              # 禁用防火墙
sudo ufw status               # 查看防火墙状态
sudo ufw status verbose       # 详细状态

# 规则管理
sudo ufw allow 22             # 允许SSH端口
sudo ufw allow 80/tcp         # 允许HTTP端口
sudo ufw allow from 192.168.1.0/24  # 允许特定网段
sudo ufw deny 23              # 拒绝telnet端口
sudo ufw delete allow 80      # 删除规则
Firewalld防火墙(CentOS/RHEL)
# Firewalld基本操作
sudo systemctl start firewalld    # 启动防火墙
sudo systemctl enable firewalld   # 设置开机自启
sudo firewall-cmd --state         # 查看防火墙状态

# 区域管理
sudo firewall-cmd --get-zones     # 查看所有区域
sudo firewall-cmd --get-default-zone  # 查看默认区域
sudo firewall-cmd --set-default-zone=public  # 设置默认区域

# 服务和端口管理
sudo firewall-cmd --add-service=http --permanent     # 永久允许HTTP
sudo firewall-cmd --add-port=8080/tcp --permanent    # 永久允许8080端口
sudo firewall-cmd --reload                           # 重新加载配置

实践项目建议

项目一:个人服务器搭建

  • 在虚拟机中安装Linux系统
  • 配置SSH远程访问
  • 搭建Web服务器(Apache/Nginx)
  • 配置防火墙和基本安全设置

项目二:自动化脚本开发

  • 编写系统监控脚本
  • 创建自动备份脚本
  • 开发日志分析工具
  • 实现服务健康检查

项目三:容器化环境搭建

  • 安装和配置Docker
  • 创建自定义Docker镜像
  • 使用Docker Compose管理多容器应用
  • 学习Kubernetes基础概念

学习建议与最佳实践

学习方法

  1. 理论与实践结合:每学一个概念都要动手操作
  2. 搭建实验环境:使用虚拟机进行各种实验
  3. 阅读官方文档:养成查阅man手册的习惯
  4. 参与开源项目:通过实际项目提升技能
  5. 持续关注新技术:Linux生态系统发展迅速

常见学习误区

  • 只记命令不理解原理
  • 忽视安全性考虑
  • 不重视脚本编程能力
  • 缺乏系统性学习规划

进阶方向选择

  • 系统运维:监控、自动化、性能优化
  • 云计算:AWS、Azure、阿里云等云平台
  • 容器技术:Docker、Kubernetes、微服务
  • 安全方向:渗透测试、安全加固、合规审计
  • 开发运维:CI/CD、基础设施即代码

第四阶段:Shell编程与自动化(2-3个月)

4.1 Shell脚本基础

Bash脚本语法
#!/bin/bash
# 这是一个示例脚本

# 变量定义
name="Linux"
version=5.4
readonly PI=3.14159

# 变量使用
echo "Hello, $name!"
echo "Version: ${version}"
echo "Pi value: $PI"

# 命令替换
current_date=$(date)
user_count=`who | wc -l`
echo "Current date: $current_date"
echo "Logged in users: $user_count"
条件判断与循环
#!/bin/bash

# 条件判断
if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
elif [ $1 = "start" ]; then
    echo "Starting service..."
else
    echo "Unknown command: $1"
fi

# 数值比较
num=10
if [ $num -gt 5 ]; then
    echo "Number is greater than 5"
fi

# 文件测试
if [ -f "/etc/passwd" ]; then
    echo "Password file exists"
fi

# for循环
for i in {1..5}; do
    echo "Count: $i"
done

# while循环
counter=1
while [ $counter -le 3 ]; do
    echo "Loop iteration: $counter"
    ((counter++))
done

# 遍历文件
for file in /etc/*.conf; do
    if [ -f "$file" ]; then
        echo "Config file: $file"
    fi
done
函数与参数处理
#!/bin/bash

# 函数定义
backup_file() {
    local source_file=$1
    local backup_dir=$2

    if [ ! -f "$source_file" ]; then
        echo "Error: Source file does not exist"
        return 1
    fi

    if [ ! -d "$backup_dir" ]; then
        mkdir -p "$backup_dir"
    fi

    cp "$source_file" "$backup_dir/$(basename $source_file).$(date +%Y%m%d)"
    echo "Backup completed: $source_file"
}

# 参数处理
while getopts "f:d:h" opt; do
    case $opt in
        f) source_file="$OPTARG" ;;
        d) backup_dir="$OPTARG" ;;
        h) echo "Usage: $0 -f <file> -d <directory>"; exit 0 ;;
        *) echo "Invalid option"; exit 1 ;;
    esac
done

# 调用函数
if [ -n "$source_file" ] && [ -n "$backup_dir" ]; then
    backup_file "$source_file" "$backup_dir"
else
    echo "Please provide both source file and backup directory"
fi

4.2 系统监控脚本

系统资源监控
#!/bin/bash
# 系统监控脚本

LOG_FILE="/var/log/system_monitor.log"
ALERT_EMAIL="admin@example.com"

# 检查CPU使用率
check_cpu() {
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
    cpu_usage=${cpu_usage%.*}  # 去除小数部分

    if [ $cpu_usage -gt 80 ]; then
        echo "$(date): HIGH CPU USAGE: ${cpu_usage}%" >> $LOG_FILE
        echo "CPU usage is ${cpu_usage}%" | mail -s "CPU Alert" $ALERT_EMAIL
    fi
}

# 检查内存使用率
check_memory() {
    mem_usage=$(free | grep Mem | awk '{printf("%.0f", $3/$2 * 100.0)}')

    if [ $mem_usage -gt 85 ]; then
        echo "$(date): HIGH MEMORY USAGE: ${mem_usage}%" >> $LOG_FILE
        echo "Memory usage is ${mem_usage}%" | mail -s "Memory Alert" $ALERT_EMAIL
    fi
}

# 检查磁盘使用率
check_disk() {
    df -h | awk 'NR>1 {print $5 " " $6}' | while read usage partition; do
        usage_num=${usage%?}  # 去除%符号
        if [ $usage_num -gt 90 ]; then
            echo "$(date): HIGH DISK USAGE: $partition $usage" >> $LOG_FILE
            echo "Disk usage on $partition is $usage" | mail -s "Disk Alert" $ALERT_EMAIL
        fi
    done
}

# 检查服务状态
check_services() {
    services=("nginx" "mysql" "ssh")

    for service in "${services[@]}"; do
        if ! systemctl is-active --quiet $service; then
            echo "$(date): SERVICE DOWN: $service" >> $LOG_FILE
            echo "Service $service is down" | mail -s "Service Alert" $ALERT_EMAIL
        fi
    done
}

# 主函数
main() {
    echo "$(date): Starting system monitoring..." >> $LOG_FILE
    check_cpu
    check_memory
    check_disk
    check_services
    echo "$(date): System monitoring completed." >> $LOG_FILE
}

# 执行监控
main

4.3 自动化部署脚本

Web应用部署脚本
#!/bin/bash
# Web应用自动部署脚本

APP_NAME="mywebapp"
APP_DIR="/opt/$APP_NAME"
BACKUP_DIR="/backup/$APP_NAME"
GIT_REPO="https://github.com/user/mywebapp.git"
SERVICE_NAME="$APP_NAME"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

log() {
    echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
}

error() {
    echo -e "${RED}[ERROR]${NC} $1" >&2
}

warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

# 备份当前版本
backup_current() {
    if [ -d "$APP_DIR" ]; then
        log "Backing up current version..."
        backup_name="$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S)"
        mkdir -p "$BACKUP_DIR"
        cp -r "$APP_DIR" "$backup_name"
        log "Backup created: $backup_name"
    fi
}

# 部署新版本
deploy_app() {
    log "Starting deployment..."

    # 停止服务
    log "Stopping service: $SERVICE_NAME"
    sudo systemctl stop $SERVICE_NAME

    # 备份当前版本
    backup_current

    # 拉取最新代码
    if [ -d "$APP_DIR/.git" ]; then
        log "Updating existing repository..."
        cd "$APP_DIR"
        git pull origin main
    else
        log "Cloning repository..."
        sudo rm -rf "$APP_DIR"
        sudo git clone "$GIT_REPO" "$APP_DIR"
    fi

    # 安装依赖
    log "Installing dependencies..."
    cd "$APP_DIR"
    if [ -f "requirements.txt" ]; then
        pip install -r requirements.txt
    elif [ -f "package.json" ]; then
        npm install
    fi

    # 构建应用
    if [ -f "build.sh" ]; then
        log "Building application..."
        bash build.sh
    fi

    # 设置权限
    sudo chown -R www-data:www-data "$APP_DIR"
    sudo chmod -R 755 "$APP_DIR"

    # 启动服务
    log "Starting service: $SERVICE_NAME"
    sudo systemctl start $SERVICE_NAME

    # 检查服务状态
    if systemctl is-active --quiet $SERVICE_NAME; then
        log "Deployment successful! Service is running."
    else
        error "Deployment failed! Service is not running."
        return 1
    fi
}

# 回滚功能
rollback() {
    latest_backup=$(ls -t "$BACKUP_DIR" | head -n1)
    if [ -z "$latest_backup" ]; then
        error "No backup found for rollback"
        return 1
    fi

    warning "Rolling back to: $latest_backup"
    sudo systemctl stop $SERVICE_NAME
    sudo rm -rf "$APP_DIR"
    sudo cp -r "$BACKUP_DIR/$latest_backup" "$APP_DIR"
    sudo systemctl start $SERVICE_NAME
    log "Rollback completed"
}

# 主函数
case "$1" in
    deploy)
        deploy_app
        ;;
    rollback)
        rollback
        ;;
    *)
        echo "Usage: $0 {deploy|rollback}"
        exit 1
        ;;
esac

第五阶段:高级系统管理(3-4个月)

5.1 性能优化与调优

系统性能分析
# CPU性能分析
# 查看CPU使用情况
top -p $(pgrep -d',' process_name)    # 监控特定进程
htop                                  # 交互式进程查看器
iotop                                # I/O监控
vmstat 1                             # 虚拟内存统计
mpstat 1                             # 多处理器统计

# 内存分析
free -h                              # 内存使用情况
cat /proc/meminfo                    # 详细内存信息
pmap -x PID                          # 进程内存映射
valgrind --tool=memcheck program     # 内存泄漏检测

# 磁盘I/O分析
iostat -x 1                          # I/O统计
iotop                                # I/O监控
lsof +D /path                        # 查看目录下打开的文件
fuser -v /path/file                  # 查看使用文件的进程
内核参数优化
# 查看和修改内核参数
sysctl -a                            # 查看所有内核参数
sysctl vm.swappiness                 # 查看特定参数
sudo sysctl vm.swappiness=10         # 临时修改参数

# 永久修改内核参数
sudo vim /etc/sysctl.conf
# 添加以下内容:
# 网络优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 内存管理优化
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# 应用配置
sudo sysctl -p

5.2 日志管理与分析

系统日志管理
# Systemd日志管理
journalctl                           # 查看所有日志
journalctl -u service_name           # 查看特定服务日志
journalctl -f                        # 实时查看日志
journalctl --since "2024-01-01"     # 查看指定时间后的日志
journalctl --until "2024-01-31"     # 查看指定时间前的日志
journalctl -p err                    # 查看错误级别日志

# 传统日志文件
tail -f /var/log/syslog              # 实时查看系统日志
tail -f /var/log/auth.log            # 查看认证日志
tail -f /var/log/nginx/access.log    # 查看Nginx访问日志
tail -f /var/log/nginx/error.log     # 查看Nginx错误日志
日志分析脚本
#!/bin/bash
# 日志分析脚本

LOG_FILE="/var/log/nginx/access.log"
REPORT_FILE="/tmp/log_analysis_$(date +%Y%m%d).txt"

# 分析访问日志
analyze_access_log() {
    echo "=== Nginx Access Log Analysis ===" > $REPORT_FILE
    echo "Analysis Date: $(date)" >> $REPORT_FILE
    echo "" >> $REPORT_FILE

    # 统计总请求数
    total_requests=$(wc -l < $LOG_FILE)
    echo "Total Requests: $total_requests" >> $REPORT_FILE

    # 统计独立IP数
    unique_ips=$(awk '{print $1}' $LOG_FILE | sort | uniq | wc -l)
    echo "Unique IPs: $unique_ips" >> $REPORT_FILE

    # 统计状态码
    echo "" >> $REPORT_FILE
    echo "Status Code Distribution:" >> $REPORT_FILE
    awk '{print $9}' $LOG_FILE | sort | uniq -c | sort -nr >> $REPORT_FILE

    # 统计访问最多的IP
    echo "" >> $REPORT_FILE
    echo "Top 10 IPs:" >> $REPORT_FILE
    awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE

    # 统计访问最多的页面
    echo "" >> $REPORT_FILE
    echo "Top 10 Pages:" >> $REPORT_FILE
    awk '{print $7}' $LOG_FILE | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE

    echo "Analysis completed. Report saved to: $REPORT_FILE"
}

# 检查异常访问
check_suspicious_activity() {
    echo "" >> $REPORT_FILE
    echo "=== Suspicious Activity ===" >> $REPORT_FILE

    # 检查404错误
    echo "404 Errors:" >> $REPORT_FILE
    grep " 404 " $LOG_FILE | awk '{print $1, $7}' | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE

    # 检查大量请求的IP
    echo "" >> $REPORT_FILE
    echo "IPs with >1000 requests:" >> $REPORT_FILE
    awk '{print $1}' $LOG_FILE | sort | uniq -c | awk '$1 > 1000 {print $2, $1}' >> $REPORT_FILE
}

# 执行分析
analyze_access_log
check_suspicious_activity

# 发送报告邮件(如果配置了邮件)
if command -v mail >/dev/null 2>&1; then
    mail -s "Daily Log Analysis Report" admin@example.com < $REPORT_FILE
fi

5.3 备份与恢复策略

自动备份脚本
#!/bin/bash
# 系统备份脚本

BACKUP_ROOT="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30

# 备份配置
MYSQL_USER="backup_user"
MYSQL_PASS="backup_password"
BACKUP_DIRS=("/etc" "/home" "/var/www")
EXCLUDE_PATTERNS=("*.tmp" "*.log" "cache/*")

# 创建备份目录
create_backup_dir() {
    local backup_type=$1
    local backup_dir="$BACKUP_ROOT/$backup_type/$DATE"
    mkdir -p "$backup_dir"
    echo "$backup_dir"
}

# 系统文件备份
backup_system_files() {
    local backup_dir=$(create_backup_dir "system")

    for dir in "${BACKUP_DIRS[@]}"; do
        if [ -d "$dir" ]; then
            echo "Backing up $dir..."
            tar_file="$backup_dir/$(basename $dir)_$DATE.tar.gz"

            # 构建排除参数
            exclude_args=""
            for pattern in "${EXCLUDE_PATTERNS[@]}"; do
                exclude_args="$exclude_args --exclude=$pattern"
            done

            tar czf "$tar_file" $exclude_args -C "$(dirname $dir)" "$(basename $dir)"

            if [ $? -eq 0 ]; then
                echo "Successfully backed up $dir to $tar_file"
            else
                echo "Failed to backup $dir" >&2
            fi
        fi
    done
}

# 数据库备份
backup_databases() {
    local backup_dir=$(create_backup_dir "database")

    # MySQL备份
    if command -v mysqldump >/dev/null 2>&1; then
        echo "Backing up MySQL databases..."
        databases=$(mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")

        for db in $databases; do
            echo "Backing up database: $db"
            mysqldump -u$MYSQL_USER -p$MYSQL_PASS --single-transaction --routines --triggers "$db" > "$backup_dir/${db}_$DATE.sql"
            gzip "$backup_dir/${db}_$DATE.sql"
        done
    fi
}

# 清理旧备份
cleanup_old_backups() {
    echo "Cleaning up backups older than $RETENTION_DAYS days..."
    find "$BACKUP_ROOT" -type f -mtime +$RETENTION_DAYS -delete
    find "$BACKUP_ROOT" -type d -empty -delete
}

# 备份验证
verify_backup() {
    local backup_dir=$1
    local total_files=$(find "$backup_dir" -type f | wc -l)
    local total_size=$(du -sh "$backup_dir" | cut -f1)

    echo "Backup verification:"
    echo "  Location: $backup_dir"
    echo "  Files: $total_files"
    echo "  Size: $total_size"

    # 检查备份文件完整性
    find "$backup_dir" -name "*.tar.gz" -exec tar -tzf {} >/dev/null \; -print
}

# 主备份流程
main() {
    echo "Starting backup process at $(date)"

    backup_system_files
    backup_databases

    # 验证最新备份
    latest_backup=$(find "$BACKUP_ROOT" -maxdepth 2 -type d -name "*$DATE*" | head -1)
    if [ -n "$latest_backup" ]; then
        verify_backup "$latest_backup"
    fi

    cleanup_old_backups

    echo "Backup process completed at $(date)"
}

# 执行备份
main 2>&1 | tee "/var/log/backup_$DATE.log"

第六阶段:容器化与云原生(3-4个月)

6.1 Docker容器技术

Docker基础操作
# Docker安装(Ubuntu)
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce

# 基本Docker命令
docker --version                     # 查看Docker版本
sudo systemctl start docker         # 启动Docker服务
sudo systemctl enable docker        # 设置开机自启
sudo usermod -aG docker $USER       # 将用户添加到docker组

# 镜像管理
docker images                        # 列出本地镜像
docker pull ubuntu:20.04            # 拉取镜像
docker build -t myapp:latest .      # 构建镜像
docker rmi image_id                  # 删除镜像

# 容器管理
docker run -it ubuntu:20.04 bash    # 交互式运行容器
docker run -d -p 80:80 nginx        # 后台运行容器并映射端口
docker ps                           # 查看运行中的容器
docker ps -a                        # 查看所有容器
docker stop container_id             # 停止容器
docker rm container_id               # 删除容器
Dockerfile编写
# 示例Dockerfile
FROM ubuntu:20.04

# 设置维护者信息
LABEL maintainer="admin@example.com"

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
ENV APP_HOME=/app

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    nginx \
    && rm -rf /var/lib/apt/lists/*

# 创建应用目录
WORKDIR $APP_HOME

# 复制应用文件
COPY requirements.txt .
COPY app/ ./app/
COPY nginx.conf /etc/nginx/nginx.conf

# 安装Python依赖
RUN pip3 install -r requirements.txt

# 创建非root用户
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser $APP_HOME
USER appuser

# 暴露端口
EXPOSE 8000

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

# 启动命令
CMD ["python3", "app/main.py"]
Docker Compose配置
# docker-compose.yml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/myapp
    depends_on:
      - db
      - redis
    volumes:
      - ./app:/app
      - static_volume:/app/static
    networks:
      - app-network
    restart: unless-stopped

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app-network
    restart: unless-stopped

  redis:
    image: redis:6-alpine
    networks:
      - app-network
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - static_volume:/static
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - web
    networks:
      - app-network
    restart: unless-stopped

volumes:
  postgres_data:
  static_volume:

networks:
  app-network:
    driver: bridge

6.2 Kubernetes基础

Kubernetes集群搭建(使用kubeadm)
# 安装Docker和Kubernetes组件
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker

# 安装kubeadm, kubelet, kubectl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 初始化集群(在主节点执行)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Kubernetes资源配置
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  labels:
    app: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: web-app
        image: myapp:latest
        ports:
        - containerPort: 8000
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: database-url
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 8000
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8000
          initialDelaySeconds: 5
          periodSeconds: 5

---
apiVersion: v1
kind: Service
metadata:
  name: web-app-service
spec:
  selector:
    app: web-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8000
  type: LoadBalancer

---
apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
type: Opaque
data:
  database-url: cG9zdGdyZXNxbDovL3VzZXI6cGFzc3dvcmRAZGI6NTQzMi9teWFwcA==

学习资源与认证

官方文档与资源

  • Linux Documentation Project: https://tldp.org/
  • Red Hat Documentation: https://access.redhat.com/documentation/
  • Ubuntu Documentation: https://help.ubuntu.com/
  • Arch Linux Wiki: https://wiki.archlinux.org/
  • Kernel.org: https://www.kernel.org/doc/

推荐书籍

  1. 《鸟哥的Linux私房菜》:Linux入门经典
  2. 《Linux系统管理技术手册》:系统管理权威指南
  3. 《Linux性能优化实战》:性能调优专业指导
  4. 《Docker技术入门与实战》:容器技术学习
  5. 《Kubernetes权威指南》:K8s学习必备

在线课程平台

  • Linux Foundation Training: https://training.linuxfoundation.org/
  • Red Hat Training: https://www.redhat.com/en/services/training
  • Coursera Linux课程: https://www.coursera.org/
  • edX Linux课程: https://www.edx.org/
  • Udemy Linux课程: https://www.udemy.com/

专业认证

  • LPIC (Linux Professional Institute Certification)
  • RHCSA/RHCE (Red Hat Certified System Administrator/Engineer)
  • CompTIA Linux+
  • SUSE Certified Administrator
  • CKA (Certified Kubernetes Administrator)

实践环境

  • VirtualBox/VMware: 本地虚拟化环境
  • AWS/Azure/GCP: 云服务器实践
  • Docker Desktop: 容器化学习环境
  • Vagrant: 开发环境管理
  • GitHub Codespaces: 云端开发环境

职业发展路径

Linux运维工程师(0-2年)

  • 掌握Linux基础操作和系统管理
  • 熟悉Shell脚本编程
  • 了解网络配置和安全基础
  • 能够处理常见系统问题

高级运维工程师(2-5年)

  • 精通系统性能优化和故障排查
  • 掌握自动化运维工具
  • 熟悉容器技术和云平台
  • 具备架构设计能力

运维架构师/DevOps工程师(5年以上)

  • 设计和实施大规模基础设施
  • 推动DevOps文化和实践
  • 掌握云原生技术栈
  • 具备团队管理和技术决策能力

技术专家/平台工程师

  • 深入理解Linux内核和系统原理
  • 开发运维平台和工具
  • 制定技术标准和最佳实践
  • 推动技术创新和发展

总结

Linux学习是一个循序渐进的过程,需要大量的实践和积累。通过系统化的学习路线,从基础命令到高级系统管理,从网络配置到安全防护,从Shell编程到容器化技术,你将逐步掌握Linux的核心技能。

学习要点回顾

  1. 扎实的基础:命令行操作和系统概念是根本
  2. 实践导向:通过项目和实际问题来学习
  3. 自动化思维:用脚本和工具提高效率
  4. 持续学习:技术发展迅速,需要不断更新知识
  5. 社区参与:参与开源项目和技术社区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值