# Linux 系统学习路线图(由浅入深) > 从零基础到系统掌握 Linux > 适合:大学生、程序员、运维人员 > 学习周期:3-6 个月 --- ## 📚 学习阶段总览 | 阶段 | 主题 | 周期 | 目标 | |------|------|------|------| | **第一阶段** | Linux 基础入门 | 2-3 周 | 熟悉命令行,能日常操作 | | **第二阶段** | 系统管理 | 3-4 周 | 管理系统,配置服务 | | **第三阶段** | Shell 编程 | 2-3 周 | 自动化脚本,提高效率 | | **第四阶段** | 网络与服务 | 3-4 周 | 搭建服务,网络配置 | | **第五阶段** | 内核与进阶 | 持续学习 | 深入原理,性能优化 | --- ## 第一阶段:Linux 基础入门(2-3 周) ### 1.1 认识 Linux **什么是 Linux?** - Linux 是一个开源的类 Unix 操作系统内核 - 由 Linus Torvalds 于 1991 年发布 - 常见的发行版:Ubuntu、CentOS、Debian、Arch **为什么要学 Linux?** - 服务器领域 90%+ 使用 Linux - 开发、运维、测试必备技能 - 开源免费,高度可定制 ### 1.2 安装 Linux **方案一:虚拟机(推荐新手)** ``` Windows + VMware/VirtualBox + Ubuntu ``` **方案二:双系统** ``` Windows + Ubuntu 双启动 ``` **方案三:云服务器** ``` 阿里云/腾讯云/华为云 ECS ``` ### 1.3 基础命令(每天练习) #### 文件操作 ```bash # 查看当前目录 pwd # 列出文件 ls -la # 切换目录 cd /home cd ~ cd .. # 创建文件 touch file.txt # 创建目录 mkdir folder mkdir -p folder/subfolder # 复制 cp file.txt /tmp/ cp -r folder /tmp/ # 移动/重命名 mv file.txt new.txt mv folder /tmp/ # 删除 rm file.txt rm -rf folder/ # 查看文件内容 cat file.txt head -20 file.txt tail -20 file.txt less file.txt ``` #### 系统信息 ```bash # 查看系统版本 cat /etc/os-release uname -a # 查看磁盘空间 df -h # 查看内存 free -h # 查看进程 ps aux top htop # 查看网络 ip addr ifconfig ``` #### 用户与权限 ```bash # 查看当前用户 whoami id # 切换用户 su - username sudo command # 修改权限 chmod 755 file.txt chmod +x script.sh # 修改所有者 chown user:group file.txt ``` ### 1.4 文本编辑器 **Vim(必须掌握)** ```bash vim file.txt # 模式: # 普通模式 → i 进入插入模式 # 插入模式 → Esc 返回普通模式 # 普通模式 → : 进入命令模式 # 常用命令: # :w 保存 # :q 退出 # :wq 保存并退出 # :q! 强制退出 # dd 删除一行 # yy 复制一行 # p 粘贴 # u 撤销 ``` ### 1.5 实践任务 - [ ] 安装 Ubuntu 虚拟机 - [ ] 练习基础命令 30 分钟/天 - [ ] 用 Vim 编辑配置文件 - [ ] 创建、删除、移动文件和目录 --- ## 第二阶段:系统管理(3-4 周) ### 2.1 软件包管理 **Ubuntu/Debian(apt)** ```bash # 更新软件源 sudo apt update # 升级软件 sudo apt upgrade # 安装软件 sudo apt install nginx # 卸载软件 sudo apt remove nginx sudo apt purge nginx # 搜索软件 apt search nginx ``` **CentOS/RHEL(yum/dnf)** ```bash # 更新 sudo yum update # 安装 sudo yum install nginx # 卸载 sudo yum remove nginx ``` ### 2.2 系统服务管理 ```bash # 查看服务状态 systemctl status nginx # 启动服务 sudo systemctl start nginx # 停止服务 sudo systemctl stop nginx # 重启服务 sudo systemctl restart nginx # 开机自启 sudo systemctl enable nginx # 禁用自启 sudo systemctl disable nginx ``` ### 2.3 磁盘与存储 ```bash # 查看分区 lsblk fdisk -l # 挂载磁盘 sudo mount /dev/sdb1 /mnt # 查看挂载 df -h # 卸载 sudo umount /mnt ``` ### 2.4 用户与组管理 ```bash # 创建用户 sudo useradd -m username sudo passwd username # 创建组 sudo groupadd groupname # 添加用户到组 sudo usermod -aG groupname username # 删除用户 sudo userdel -r username ``` ### 2.5 日志管理 ```bash # 查看系统日志 journalctl # 查看特定服务日志 journalctl -u nginx # 实时查看日志 tail -f /var/log/syslog tail -f /var/log/nginx/access.log ``` ### 2.6 实践任务 - [ ] 安装配置 Nginx - [ ] 创建新用户并配置 sudo 权限 - [ ] 挂载一个新磁盘 - [ ] 排查服务启动失败问题 --- ## 第三阶段:Shell 编程(2-3 周) ### 3.1 Shell 基础 **什么是 Shell?** - Shell 是用户与 Linux 内核的交互界面 - 常见的 Shell:Bash、Zsh、Fish **第一个脚本** ```bash #!/bin/bash # 这是一个注释 echo "Hello, World!" ``` ### 3.2 变量与数据类型 ```bash #!/bin/bash # 定义变量 name="Linux" num=100 # 使用变量 echo "Hello, $name" echo "Number is ${num}" # 只读变量 readonly PI=3.14159 # 删除变量 unset name ``` ### 3.3 条件判断 ```bash #!/bin/bash # if 语句 if [ -f "file.txt" ]; then echo "File exists" elif [ -d "folder" ]; then echo "Folder exists" else echo "Nothing exists" fi # case 语句 case $1 in start) echo "Starting..." ;; stop) echo "Stopping..." ;; *) echo "Usage: $0 {start|stop}" ;; esac ``` ### 3.4 循环 ```bash #!/bin/bash # for 循环 for i in 1 2 3 4 5; do echo "Number: $i" done # for 循环(范围) for i in {1..10}; do echo $i done # while 循环 count=0 while [ $count -lt 5 ]; do echo "Count: $count" ((count++)) done # 遍历文件 for file in *.txt; do echo "Processing: $file" done ``` ### 3.5 函数 ```bash #!/bin/bash # 定义函数 function greet() { echo "Hello, $1!" } # 调用函数 greet "World" greet "Linux" # 带返回值的函数 function add() { return $(($1 + $2)) } add 3 5 echo "Result: $?" ``` ### 3.6 实用脚本示例 **自动备份脚本** ```bash #!/bin/bash BACKUP_DIR="/backup/$(date +%Y%m%d)" SOURCE_DIR="/home/user/data" # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份 tar -czf $BACKUP_DIR/backup.tar.gz $SOURCE_DIR # 删除 7 天前的备份 find /backup -type d -mtime +7 -exec rm -rf {} \; echo "Backup completed: $BACKUP_DIR" ``` **系统监控脚本** ```bash #!/bin/bash # 获取系统信息 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}') MEM_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}') DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}') # 发送邮件告警(如果超过阈值) if [ ${MEM_USAGE%.*} -gt 90 ]; then echo "High memory usage: $MEM_USAGE%" | mail -s "Alert" admin@example.com fi echo "CPU: $CPU_USAGE%, Memory: $MEM_USAGE%, Disk: $DISK_USAGE" ``` ### 3.7 实践任务 - [ ] 编写自动备份脚本 - [ ] 编写系统监控脚本 - [ ] 编写批量处理文件脚本 - [ ] 设置定时任务(cron) --- ## 第四阶段:网络与服务(3-4 周) ### 4.1 网络基础 **IP 地址与子网** ```bash # 查看 IP ip addr ifconfig # 查看路由 ip route route -n # 查看 DNS cat /etc/resolv.conf # 测试连通性 ping baidu.com traceroute baidu.com # 查看端口 netstat -tunlp ss -tunlp ``` ### 4.2 SSH 远程管理 ```bash # 连接远程服务器 ssh user@192.168.1.100 # 指定端口 ssh -p 2222 user@192.168.1.100 # 免密登录(密钥) ssh-keygen ssh-copy-id user@192.168.1.100 # 传输文件 scp file.txt user@192.168.1.100:/tmp/ rsync -avz folder/ user@192.168.1.100:/backup/ ``` ### 4.3 防火墙配置 **iptables** ```bash # 查看规则 sudo iptables -L -n -v # 允许 SSH sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 HTTP/HTTPS sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 保存规则 sudo iptables-save > /etc/iptables/rules.v4 ``` **ufw(Ubuntu 推荐)** ```bash # 启用防火墙 sudo ufw enable # 允许 SSH sudo ufw allow 22/tcp # 允许 HTTP/HTTPS sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 查看状态 sudo ufw status ``` ### 4.4 Web 服务器搭建 **Nginx** ```bash # 安装 sudo apt install nginx # 启动 sudo systemctl start nginx # 配置 sudo vim /etc/nginx/sites-available/default # 测试配置 sudo nginx -t # 重载 sudo systemctl reload nginx ``` **基本配置示例** ```nginx server { listen 80; server_name example.com; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } } ``` ### 4.5 数据库安装 **MySQL** ```bash # 安装 sudo apt install mysql-server # 安全配置 sudo mysql_secure_installation # 登录 sudo mysql -u root -p ``` **基本操作** ```sql -- 创建数据库 CREATE DATABASE mydb; -- 创建用户 CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; -- 授权 GRANT ALL PRIVILEGES ON mydb.* TO 'user'@'localhost'; FLUSH PRIVILEGES; ``` ### 4.6 Docker 容器化 **安装 Docker** ```bash # 安装 sudo apt install docker.io # 启动 sudo systemctl start docker sudo systemctl enable docker # 免 sudo sudo usermod -aG docker $USER ``` **基本使用** ```bash # 拉取镜像 docker pull nginx # 运行容器 docker run -d -p 80:80 --name my-nginx nginx # 查看容器 docker ps docker ps -a # 停止/删除 docker stop my-nginx docker rm my-nginx # 进入容器 docker exec -it my-nginx /bin/bash ``` ### 4.7 实践任务 - [ ] 配置 SSH 免密登录 - [ ] 搭建 Nginx + MySQL 环境 - [ ] 配置防火墙规则 - [ ] 用 Docker 部署应用 --- ## 第五阶段:内核与进阶(持续学习) ### 5.1 进程与内存管理 ```bash # 查看进程树 pstree # 查看进程详情 cat /proc/1/status # 内存映射 cat /proc/1/maps # 系统调用追踪 strace -p PID ``` ### 5.2 性能优化 ```bash # CPU 性能分析 perf top # 磁盘 IO 分析 iotop # 网络分析 iftop nethogs # 综合监控 vmstat 1 iostat 1 ```