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的核心特性
安装与配置 1 2 3 4 5 6 7 8 9 10 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目录树结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 / ├── bin/ ├── boot/ ├── dev/ ├── etc/ ├── home/ ├── lib/ ├── media/ ├── mnt/ ├── opt/ ├── proc/ ├── root/ ├── run/ ├── sbin/ ├── srv/ ├── sys/ ├── tmp/ ├── usr/ └── var/
文件类型与权限 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ls -la file filename stat filename chmod 755 filename chmod u+x filename chown user:group filename chgrp group filename
1.3 基础命令操作 文件与目录操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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 tail -f filename grep "pattern" filename
文本处理工具 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 grep -r "pattern" /path grep -i "pattern" file grep -v "pattern" file wc -l filename wc -w filename wc -c filename sort filename sort -n filename uniq filename sort filename | uniq
1.4 进程与系统监控 进程管理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ps aux ps -ef top htop pgrep process_name kill PID kill -9 PID killall process_name nohup command & jobs fg %1
系统资源监控 1 2 3 4 5 6 7 8 free -h df -h du -sh /path lscpu lsblk lsusb lspci
第二阶段:系统管理基础(2-3个月) 2.1 用户与权限管理 用户管理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo useradd -m username sudo passwd username sudo usermod -aG sudo username sudo userdel -r username id username whoami who w sudo groupadd groupname sudo groupdel groupname groups username sudo usermod -G group1,group2 username
高级权限管理 1 2 3 4 5 6 7 8 9 10 11 12 chmod +s filename chmod +t directory chmod 4755 filename chmod 2755 directory chmod 1755 directory setfacl -m u:username:rwx filename setfacl -m g:groupname:rx filename getfacl filename setfacl -x u:username filename
2.2 软件包管理 Debian/Ubuntu系统(APT) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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) 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo yum update sudo yum install package_name sudo yum remove package_name yum search keyword yum info package_name yum list installed sudo dnf update sudo dnf install package_name sudo dnf remove package_name dnf search keyword
2.3 服务管理(Systemd) 服务控制 1 2 3 4 5 6 7 8 9 10 11 12 13 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
自定义服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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 sudo systemctl daemon-reloadsudo systemctl enable myapp.servicesudo systemctl start myapp.service
第三阶段:网络与安全管理(2-3个月) 3.1 网络配置与管理 网络基础配置 1 2 3 4 5 6 7 8 9 10 11 ip addr show ip link show sudo ip addr add 192.168.1.100/24 dev eth0 sudo ip route add default via 192.168.1.1 ifconfig route -n netstat -tuln ss -tuln
网络诊断工具 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ping -c 4 google.com traceroute google.com mtr google.com nslookup google.com dig google.com dig @8.8.8.8 google.com nmap -p 80,443 target_host nmap -sS target_host telnet host port
3.2 防火墙配置 UFW防火墙(Ubuntu) 1 2 3 4 5 6 7 8 9 10 11 12 sudo ufw enable sudo ufw disable sudo ufw status sudo ufw status verbose sudo ufw allow 22 sudo ufw allow 80/tcp sudo ufw allow from 192.168.1.0/24 sudo ufw deny 23 sudo ufw delete allow 80
Firewalld防火墙(CentOS/RHEL) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload
实践项目建议 项目一:个人服务器搭建
在虚拟机中安装Linux系统
配置SSH远程访问
搭建Web服务器(Apache/Nginx)
配置防火墙和基本安全设置
项目二:自动化脚本开发
编写系统监控脚本
创建自动备份脚本
开发日志分析工具
实现服务健康检查
项目三:容器化环境搭建
安装和配置Docker
创建自定义Docker镜像
使用Docker Compose管理多容器应用
学习Kubernetes基础概念
学习建议与最佳实践 学习方法
理论与实践结合 :每学一个概念都要动手操作
搭建实验环境 :使用虚拟机进行各种实验
阅读官方文档 :养成查阅man手册的习惯
参与开源项目 :通过实际项目提升技能
持续关注新技术 :Linux生态系统发展迅速
常见学习误区
只记命令不理解原理
忽视安全性考虑
不重视脚本编程能力
缺乏系统性学习规划
进阶方向选择
系统运维 :监控、自动化、性能优化
云计算 :AWS、Azure、阿里云等云平台
容器技术 :Docker、Kubernetes、微服务
安全方向 :渗透测试、安全加固、合规审计
开发运维 :CI/CD、基础设施即代码
第四阶段:Shell编程与自动化(2-3个月) 4.1 Shell脚本基础 Bash脚本语法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/bin/bash name="Linux" version=5.4 readonly PI=3.14159echo "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 "
条件判断与循环 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 30 31 32 33 34 35 36 37 38 39 40 41 #!/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 i in {1..5}; do echo "Count: $i " done 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
函数与参数处理 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 30 31 32 33 34 35 36 #!/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 系统监控脚本 系统资源监控 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #!/bin/bash LOG_FILE="/var/log/system_monitor.log" ALERT_EMAIL="admin@example.com" 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应用部署脚本 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 #!/bin/bash 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' 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 性能优化与调优 系统性能分析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 top -p $(pgrep -d',' process_name) htop iotop vmstat 1 mpstat 1 free -h cat /proc/meminfo pmap -x PID valgrind --tool=memcheck program iostat -x 1 iotop lsof +D /path fuser -v /path/file
内核参数优化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sysctl -a sysctl vm.swappiness sudo sysctl vm.swappiness=10 sudo vim /etc/sysctl.confnet.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 日志管理与分析 系统日志管理 1 2 3 4 5 6 7 8 9 10 11 12 13 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 tail -f /var/log/nginx/error.log
日志分析脚本 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #!/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 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 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 echo "404 Errors:" >> $REPORT_FILE grep " 404 " $LOG_FILE | awk '{print $1, $7}' | sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE 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 备份与恢复策略 自动备份脚本 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 #!/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" ) 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基础操作 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 sudo apt updatesudo apt install apt-transport-https ca-certificates curl software-properties-commoncurl -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 updatesudo apt install docker-cedocker --version sudo systemctl start docker sudo systemctl enable docker sudo usermod -aG docker $USER 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编写 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 30 31 32 33 34 35 36 37 38 39 40 41 FROM ubuntu:20.04 LABEL maintainer="admin@example.com" ENV DEBIAN_FRONTEND=noninteractiveENV APP_HOME=/appRUN 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 RUN pip3 install -r requirements.txt RUN useradd -m -u 1000 appuser && chown -R appuser:appuser $APP_HOME USER appuserEXPOSE 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配置 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 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) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 sudo apt updatesudo apt install -y docker.iosudo systemctl enable dockercurl -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.listsudo apt updatesudo apt install -y kubelet kubeadm kubectlsudo apt-mark hold kubelet kubeadm kubectlsudo kubeadm init --pod-network-cidr=10.244.0.0/16mkdir -p $HOME /.kubesudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/configsudo chown $(id -u):$(id -g) $HOME /.kube/configkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Kubernetes资源配置 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 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私房菜》 :Linux入门经典
《Linux系统管理技术手册》 :系统管理权威指南
《Linux性能优化实战》 :性能调优专业指导
《Docker技术入门与实战》 :容器技术学习
《Kubernetes权威指南》 :K8s学习必备
在线课程平台
专业认证
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的核心技能。
学习要点回顾
扎实的基础 :命令行操作和系统概念是根本
实践导向 :通过项目和实际问题来学习
自动化思维 :用脚本和工具提高效率
持续学习 :技术发展迅速,需要不断更新知识
社区参与 :参与开源项目和技术社区
成功的关键
动手实践 :理论必须结合实际操作
问题导向 :通过解决实际问题来学习
系统思维 :理解各个组件之间的关系
安全意识 :始终考虑安全因素
文档习惯 :记录和分享学习经验
记住,Linux的精髓在于”一切皆文件”的设计哲学和强大的命令行工具。保持好奇心,多动手实践,善于利用文档和社区资源,你一定能够成为Linux领域的专家!
愿你在Linux的世界中探索无限可能!🐧