教程雨

OKX新手入门教程导航,收录OKX注册、充值、买币、提现等基础操作教程

Linux运维工程师学习路线封面,专业科技风格展示服务器与运维主题

Linux运维工程师从入门到实战:2026年最完整的系统化学习路线

前言:为什么2026年Linux运维依然是香饽饽?

很多人觉得现在流行Serverless、容器化、Kubernetes,Linux运维是不是不吃香了?恰恰相反——越是大规模的应用,越是离不开Linux服务器。

我认识一个在二线城市工作的运维工程师朋友,去年跳槽到一家中型互联网公司,年薪从15万涨到了28万。他说现在招人特别难,真正懂Linux、能把系统跑稳的人太少了。很多候选人简历上写着”熟悉Linux”,结果连基本的日志分析、进程排查都不会。

这不是个例。根据2026年各大招聘平台的数据,Linux运维工程师依然是需求最大的技术岗位之一,平均薪资比同级别开发岗还要高15%-20%。

今天就和大家聊聊,怎么从零开始学习Linux运维,以及这条路上有哪些坑需要避开。

Linux运维工程师从入门到精通的学习路径图,系统化的成长规划展示

一、Linux运维到底是什么?

很多人对运维的理解还停留在”重装系统”、”装软件”的层面。实际上,现代Linux运维要做的事情远不止这些:

初级运维:保障服务器稳定运行,包括系统部署、日常巡检、故障处理、性能监控。

中级运维:自动化运维、CI/CD流程搭建、数据库管理、安全加固。

高级运维/DevOps:架构设计、容器化改造、Kubernetes集群管理、SRE实践。

简单来说,运维的核心职责是让系统稳如老狗,进而在稳的基础上不断提升效率和成本优化。

二、学习路线总览(12个月规划)

阶段时间核心技能目标岗位
基础入门1-2个月Linux系统操作、命令行基础桌面运维、技术支持
网络管理3-4个月网络配置、服务部署、安全防护初级运维工程师
系统管理5-6个月Shell编程、性能调优、监控告警中级运维工程师
集群架构7-8个月高可用集群、负载均衡、存储管理高级运维工程师
自动化运维9-10个月Ansible、Terraform、IaC实践DevOps工程师
云原生进阶11-12个月Docker、Kubernetes、云平台云计算工程师

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

3.1 选择你的第一个Linux发行版

对于初学者,我推荐从UbuntuRocky Linux开始:

  • Ubuntu:桌面友好,软件包丰富,社区活跃,遇到问题容易找到解决方案
  • Rocky Linux:企业级CentOS替代,稳定性强,适合以后工作环境

安装方式建议使用虚拟机:

bash

# 安装VirtualBox或使用云服务器
# 推荐云服务器:阿里云、腾讯云新用户首月9.9元
# 推荐虚拟机:VirtualBox、VMware Workstation

3.2 Linux核心概念:先理解再动手

Linux的哲学思想

  1. 一切皆文件:硬件设备、进程、网络连接,在Linux里都是文件
  2. 小工具组合:每个命令只做一件事,通过管道组合完成复杂任务
  3. 配置在文本:配置文件都是纯文本,方便版本管理和批量修改

必须记住的目录结构

bash

/                    # 根目录,所有文件的顶级父目录
├── /home            # 普通用户主目录(你的代码、项目一般放这里)
├── /root            # 超级管理员(root)主目录
├── /etc             # 系统配置文件(SSH、防火墙、软件配置)
├── /var             # 动态文件目录(日志、数据库文件)
├── /usr             # 系统软件安装目录
├── /tmp             # 临时文件目录(重启后清空)
├── /opt             # 第三方软件目录(手动安装的MySQL、Tomcat等)
└── /dev             # 设备文件目录

重要原则

  • 普通用户操作优先在/home目录下
  • 禁止随意修改/etc/root目录
  • 危险命令要三思:rm -rf /dd if=/dev/zero of=/dev/sda

3.3 命令行基础:每天都在用的技能

文件和目录操作

bash

# 切换目录
cd /home/ubuntu/projects

# 查看当前目录
pwd

# 列出文件
ls -la              # -l详细信息,-a显示隐藏文件
ls -lh              # -h人性化显示大小(KB/MB/GB)

# 创建目录
mkdir projects
mkdir -p /path/to/deep/directory    # -p递归创建

# 复制文件
cp source.txt /backup/
cp -r source_folder/ /backup/        # -r递归复制目录

# 移动/重命名
mv oldname.txt newname.txt
mv file.txt /new/location/

# 删除(慎用!)
rm file.txt                         # 删除单个文件
rm -r folder/                        # 删除目录
rm -rf /dangerous                    # 强制删除(永久!无法恢复!)

文本处理工具链

这是运维的核心技能,必须熟练掌握:

bash

# 查看文件
cat file.txt                         # 一次性显示全部内容
head -n 20 file.txt                  # 显示前20行
tail -n 100 file.txt                 # 显示后100行
tail -f /var/log/nginx/access.log    # 实时追踪日志

# 文本搜索
grep "error" /var/log/syslog         # 搜索包含error的行
grep -r "failed" /var/log/           # -r递归搜索目录
grep -i "warning" file.txt           # -i忽略大小写
grep -n "keyword" file.txt           # -n显示行号

# 高级文本处理
sed -i 's/old_string/new_string/g' file.txt   # 替换文本
awk '{print $1, $3}' file.txt                   # 提取第1、3列
find /var/log -name "*.log" -mtime -7           # 查找最近7天修改的日志

用户和权限管理

bash

# 添加用户
sudo useradd -m -s /bin/bash username
sudo passwd username

# 切换用户
su - username                        # 切换并加载环境变量

# 文件权限
chmod 755 file.sh                    # 755 = rwxr-xr-x(所有者可执行)
chmod +x script.sh                   # 添加执行权限
chown user:group file.txt            # 修改所有者

进程管理

bash

# 查看进程
ps aux                               # 查看所有进程
ps -ef | grep nginx                   # 查找nginx进程
top                                   # 动态查看(按q退出)
htop                                  # 更好用的top(需安装)

# 管理进程
kill 1234                            # 终止PID为1234的进程
kill -9 1234                         # 强制终止
killall nginx                         # 按名称终止所有nginx进程

# 后台运行
./long_running_script.sh &            # 后台运行
nohup ./script.sh &                   # 持久后台运行(关掉终端也继续)

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 systemctl is-enabled nginx       # 检查是否自启

# 查看日志
sudo journalctl -u nginx              # 查看nginx日志
sudo journalctl -u nginx -f           # 实时追踪
sudo journalctl --since "1 hour ago"  # 查看最近1小时日志

3.4 实战练习:搭建LNMP环境

学完上面的命令,来个实战:搭建一个LNMP(Linux + Nginx + MySQL + PHP)网站环境。

bash

# 1. 安装Nginx
sudo apt update
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

# 2. 安装MySQL
sudo apt install mysql-server -y
sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql_secure_installation       # 安全配置

# 3. 安装PHP
sudo apt install php-fpm php-mysql -y
sudo systemctl start php8.1-fpm

# 4. 配置Nginx支持PHP
sudo vim /etc/nginx/sites-available/default

Nginx配置示例:

nginx

server {
    listen 80;
    server_name your_domain.com;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
}

bash

# 5. 测试配置并重载
sudo nginx -t
sudo systemctl reload nginx

# 6. 创建测试页面
sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'

# 7. 访问 http://your_server_ip/info.php 验证

四、第二阶段:Linux网络管理(3-4个月)

4.1 网络基础回顾

作为运维,你需要清楚理解:

  • IP地址:设备的网络标识(IPv4 vs IPv6)
  • 子网掩码:划分网络大小(如255.255.255.0)
  • 默认网关:访问外网的出口
  • DNS:域名解析服务器

bash

# 查看网络信息
ip addr show
ip route show
cat /etc/resolv.conf

# 测试网络连通性
ping -c 4 8.8.8.8                    # 测试到Google DNS
ping -c 4 baidu.com                   # 测试DNS解析
traceroute baidu.com                  # 路由追踪
mtr baidu.com                         # ping+traceroute组合

4.2 配置静态IP

bash

# Ubuntu/Debian (netplan方式)
sudo vim /etc/netplan/00-installer-config.yaml

yaml

network:
  version: 2
  ethernets:
    ens33:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 114.114.114.114

bash

sudo netplan apply

4.3 SSH服务深度配置

SSH是运维最重要的工具,必须熟练掌握:

bash

# 基本连接
ssh username@server_ip
ssh -p 2222 username@server_ip        # 指定端口

# SSH密钥登录(安全又方便)
ssh-keygen -t ed25519 -C "your_email"
ssh-copy-id username@server_ip        # 自动上传公钥

# SSH配置优化
sudo vim /etc/ssh/sshd_config

sshd_config优化配置:

bash

# 禁止root登录
PermitRootLogin no

# 仅允许密钥登录
PasswordAuthentication no
PubkeyAuthentication yes

# 修改默认端口(安全加固)
Port 2222

# 限制用户登录
AllowUsers ubuntu deploy

# 连接超时设置
ClientAliveInterval 300
ClientAliveCountMax 2

4.4 防火墙配置

bash

# Ubuntu使用ufw
sudo ufw enable                       # 启用防火墙
sudo ufw allow 22/tcp                 # 允许SSH
sudo ufw allow 80/tcp                 # 允许HTTP
sudo ufw allow 443/tcp                # 允许HTTPS
sudo ufw deny 3306                    # 禁止MySQL端口
sudo ufw status                        # 查看状态

# CentOS/RHEL使用firewalld
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

五、第三阶段:Shell脚本与自动化(5-6个月)

5.1 为什么运维必须学Shell?

运维的日常工作充满了重复性操作:备份日志、监控状态、批量部署……手动做既低效又容易出错。Shell脚本就是把重复的事情自动化

5.2 Shell基础语法

变量和字符串

bash

#!/bin/bash

# 定义变量(=号两边不能有空格)
name="Linux运维"
version=1.0

# 使用变量
echo "欢迎学习 ${name}"
echo "当前版本: $version"

# 获取命令输出
current_date=$(date +%Y%m%d)
hostname=$(hostname)
echo "今天日期: $current_date"
echo "主机名: $hostname"

# 接收用户输入
echo "请输入您的名字:"
read username
echo "您好,$username"

条件判断

bash

#!/bin/bash

age=25

# 数值比较:-eq等于、-ne不等于、-gt大于、-lt小于、-ge大于等于、-le小于等于
if [ $age -ge 18 ]; then
    echo "已成年"
elif [ $age -ge 13 ]; then
    echo "青少年"
else
    echo "未成年"
fi

# 字符串比较:=等于、!=不等于、-z空字符串
name="admin"
if [ "$name" = "admin" ]; then
    echo "管理员登录"
fi

# 文件测试:-f文件存在、-d目录存在、-r可读、-w可写、-x可执行
if [ -f "/etc/passwd" ]; then
    echo "passwd文件存在"
fi

循环

bash

#!/bin/bash

# for循环:遍历列表
for i in 1 2 3 4 5; do
    echo "第 $i 次"
done

# for循环:遍历文件
for file in /var/log/*.log; do
    echo "处理: $file"
done

# while循环
count=1
while [ $count -le 5 ]; do
    echo "计数: $count"
    count=$((count + 1))
done

# 读取文件每一行
cat /etc/hosts | while read line; do
    echo "行内容: $line"
done

5.3 实战脚本:系统巡检脚本

bash

#!/bin/bash
# 系统巡检脚本 v1.0
# 用途:定期检查服务器健康状态

DATE=$(date +%Y%m%d_%H%M%S)
LOG_DIR="/var/log/health_check"
REPORT="$LOG_DIR/report_${DATE}.txt"

# 确保日志目录存在
mkdir -p $LOG_DIR

# 写入报告头部
echo "=====================================" > $REPORT
echo "系统巡检报告" >> $REPORT
echo "检查时间: $(date)" >> $REPORT
echo "主机名: $(hostname)" >> $REPORT
echo "=====================================" >> $REPORT
echo "" >> $REPORT

# 1. 系统基本信息
echo "【系统信息】" >> $REPORT
uname -a >> $REPORT
echo "" >> $REPORT

# 2. CPU使用率
echo "【CPU使用率】" >> $REPORT
top -bn1 | grep "Cpu(s)" >> $REPORT
echo "" >> $REPORT

# 3. 内存使用情况
echo "【内存使用情况】" >> $REPORT
free -h >> $REPORT
echo "" >> $REPORT

# 4. 磁盘使用情况
echo "【磁盘使用情况】" >> $REPORT
df -h | grep -v tmpfs >> $REPORT
echo "" >> $REPORT

# 5. 网络连接状态
echo "【网络连接统计】" >> $REPORT
echo "TCP连接数: $(netstat -an | grep tcp | wc -l)" >> $REPORT
echo "ESTABLISHED连接: $(netstat -an | grep ESTABLISHED | wc -l)" >> $REPORT
echo "" >> $REPORT

# 6. TOP 10进程
echo "【TOP 10 CPU进程】" >> $REPORT
ps aux --sort=-%cpu | head -11 >> $REPORT
echo "" >> $REPORT

# 7. 错误日志检查
echo "【最近错误日志】" >> $REPORT
journalctl -p err --since "1 day ago" | tail -20 >> $REPORT

# 8. 检查告警
echo "" >> $REPORT
echo "【告警检查】" >> $REPORT

# CPU告警
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
    echo "⚠️ CPU使用率超过80%: ${cpu_usage}%" >> $REPORT
fi

# 磁盘告警
disk_usage=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)
if [ "$disk_usage" -gt 80 ]; then
    echo "⚠️ 磁盘使用率超过80%: ${disk_usage}%" >> $REPORT
fi

# 内存告警
mem_usage=$(free | grep Mem | awk '{print int($3/$2 * 100)}')
if [ "$mem_usage" -gt 80 ]; then
    echo "⚠️ 内存使用率超过80%: ${mem_usage}%" >> $REPORT
fi

echo "" >> $REPORT
echo "=====================================" >> $REPORT
echo "巡检完成" >> $REPORT

# 屏幕输出并保存日志
cat $REPORT
echo "报告已保存至: $REPORT"

# 发送邮件告警(可选)
if grep -q "⚠️" $REPORT; then
    echo "检测到告警,请查看报告"
    # mail -s "服务器告警: $(hostname)" admin@example.com < $REPORT
fi

5.4 定时任务crontab

bash

# 编辑定时任务
crontab -e

# 格式:分 时 日 月 周 命令
# 示例:
# 每分钟执行一次
* * * * * /path/to/script.sh

# 每天凌晨2点执行
0 2 * * * /path/to/backup.sh

# 每周日凌晨3点执行
0 3 * * 0 /path/to/cleanup.sh

# 每月1日凌晨4点执行
0 4 1 * * /path/to/monthly_report.sh

# 每5分钟执行一次
*/5 * * * * /usr/local/bin/health_check.sh

六、第四阶段:服务器集群与高可用(7-8个月)

6.1 负载均衡:让流量均匀分布

bash

# Nginx负载均衡配置
upstream backend {
    server 192.168.1.10:80 weight=5;
    server 192.168.1.11:80 weight=3;
    server 192.168.1.12:80 backup;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

6.2 Keepalived高可用

两台服务器实现VIP漂移,主服务器故障时自动切换到从服务器:

bash

# 安装
sudo apt install keepalived -y

# 主服务器配置
sudo vim /etc/keepalived/keepalived.conf

conf

vrrp_instance VI_1 {
    state MASTER                    # 从服务器设为BACKUP
    interface ens33                 # 网卡名称
    virtual_router_id 51
    priority 100                   # 从服务器设为90
    advert_int 1
    
    virtual_ipaddress {
        192.168.1.100              # 虚拟IP
    }
    
    track_script {
        chk_nginx                   # 健康检查脚本
    }
}

vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx"
    interval 2
    weight -5
}

七、第五阶段:自动化运维Ansible(9-10个月)

7.1 Ansible入门

Ansible是运维自动化的神器,它通过SSH连接目标机器,不需要在远程机器安装代理:

bash

# 安装
sudo apt install ansible -y

# 配置主机清单
sudo vim /etc/ansible/hosts

ini

[webservers]
192.168.1.10
192.168.1.11
192.168.1.12

[dbservers]
192.168.1.20

[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=/home/ubuntu/.ssh/id_rsa

7.2 Ad-hoc命令:快速执行单个任务

bash

# 测试连通性
ansible all -m ping

# 在所有web服务器上安装nginx
ansible webservers -m apt -a "name=nginx state=present"

# 在所有服务器上执行shell命令
ansible all -m shell -a "df -h | grep '/$'"

# 复制文件
ansible webservers -m copy -a "src=/local/file.txt dest=/remote/file.txt"

7.3 Playbook:编写可复用的自动化任务

yaml

# deploy_webapp.yml
---
- name: Deploy Web Application
  hosts: webservers
  become: yes
  vars:
    app_version: "2.1.0"
    app_path: "/var/www/myapp"
  
  tasks:
    - name: Install required packages
      apt:
        name:
          - nginx
          - python3
          - python3-pip
        state: present
        update_cache: yes
    
    - name: Create application directory
      file:
        path: "{{ app_path }}"
        state: directory
        owner: www-data
        group: www-data
        mode: '0755'
    
    - name: Deploy application files
      git:
        repo: "https://github.com/company/webapp.git"
        version: "v{{ app_version }}"
        dest: "{{ app_path }}"
    
    - name: Install Python dependencies
      pip:
        requirements: "{{ app_path }}/requirements.txt"
        virtualenv: "{{ app_path }}/venv"
    
    - name: Configure Nginx
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/sites-available/myapp
      notify: Reload Nginx
    
    - name: Enable Nginx site
      file:
        src: /etc/nginx/sites-available/myapp
        dest: /etc/nginx/sites-enabled/myapp
        state: link
      notify: Reload Nginx
    
    - name: Restart application
      systemd:
        name: myapp
        state: restarted
        daemon_reload: yes
    
    - name: Check application health
      uri:
        url: "http://localhost/health"
        status_code: 200
      register: health_check
    
    - name: Fail deployment if health check fails
      fail:
        msg: "Application health check failed!"
      when: health_check.status != 200

  handlers:
    - name: Reload Nginx
      systemd:
        name: nginx
        state: reloaded
    
    - name: Restart Nginx
      systemd:
        name: nginx
        state: restarted

执行Playbook:

bash

# 完整执行
ansible-playbook deploy_webapp.yml

# 模拟执行(不实际操作)
ansible-playbook deploy_webapp.yml --check

# 指定标签执行
ansible-playbook deploy_webapp.yml --tags "nginx,config"

# 指定主机执行
ansible-playbook deploy_webapp.yml --limit "192.168.1.10"

八、总结与职业建议

8.1 学习路线总结

阶段核心技能学习资源
基础入门Linux命令、文件系统、用户权限《鸟哥的Linux私房菜》、实验楼
网络管理SSH、防火墙、网络配置阿里云ACP认证课程
Shell编程脚本编写、定时任务、文本处理博客园/Linuxpig系列教程
集群架构负载均衡、高可用、存储管理马哥Linux视频课程
自动化运维Ansible、Terraform、CI/CDRed Hat官方文档
云原生Docker、Kubernetes、云平台Kubernetes权威指南

8.2 实战建议

  1. 搭建实验环境:用虚拟机或云服务器搭建自己的实验环境,边学边练
  2. 参与开源项目:给Ansible角色、Kubernetes Operator贡献代码
  3. 考取认证:RHCE(红帽认证工程师)、阿里云ACP、AWS Solutions Architect
  4. 建立博客:把踩坑经历和学习心得写下来,既巩固知识又积累作品

8.3 薪资参考(2026年数据)

级别城市月薪范围年薪范围
初级运维二线6-10K8-15万
中级运维一线12-20K15-30万
高级/DevOps一线20-35K25-50万
SRE/平台工程师一线大厂35-60K50-80万

相关资源

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注