Linux 运维入门教程(2026):从系统管理、Docker、Nginx 到 Ansible 全面学习指南
零基础学习 Linux 运维,这篇教程涵盖 Linux 系统基础、Ubuntu 安装、Shell 命令、用户权限、磁盘管理、SSH、Docker、Nginx、MySQL、PostgreSQL、WireGuard、Ansible、Fail2ban、安全加固、日志管理、性能监控等内容,适合运维工程师、开发者和服务器管理员快速入门。

一、基础与系统管理
1.1 Linux 系统概述
Linux 是一个类 Unix 的开源操作系统内核,由 Linus Torvalds 于 1991 年首次发布。其核心特点包括:
| 特性 | 说明 |
|---|---|
| 开源免费 | 遵循 GPL 协议,源代码完全开放 |
| 多用户多任务 | 支持多个用户同时登录并独立运行程序 |
| 稳定性高 | 服务器可连续运行数年无需重启 |
| 安全性强 | 严格的权限管理和用户隔离机制 |
| 可定制性 | 内核模块可按需加载,高度可定制 |
主流 Linux 发行版可分为两大阵营:
- Debian 系:Ubuntu、Debian、Linux Mint(APT 包管理)
- Red Hat 系:RHEL、CentOS Stream、Fedora、Rocky Linux(RPM/YUM/DNF 包管理)
1.2 Ubuntu Server 安装要点
硬件最低要求:
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 1 GHz 单核 | 2 GHz 双核及以上 |
| 内存 | 512 MB | 2 GB 及以上 |
| 磁盘 | 2.5 GB | 20 GB 及以上 |
安装步骤概要:下载 ISO 镜像 → 制作启动 U 盘(Rufus/balenaEtcher)→ 设置 BIOS 从 U 盘启动 → 按向导分区并设置用户 → 完成安装。
1.3 Bash 命令行基础
# 命令结构:命令名 [选项] [参数]
ls -la /home # 列出 /home 目录下所有文件的详细信息
grep -r "error" /var/log # 递归搜索含 error 的日志
常用 Bash 快捷键:
| 快捷键 | 功能 |
|---|---|
Ctrl + A |
光标移到行首 |
Ctrl + E |
光标移到行尾 |
Ctrl + U |
清除光标前内容 |
Ctrl + R |
搜索历史命令 |
Tab |
命令/路径自动补全 |
管道与重定向:
# 管道:将前一命令的输出作为后一命令的输入
ps aux | grep nginx
# 输出重定向
ls -la > file_list.txt # 覆盖写入
echo "追加" >> log.txt # 追加写入
# 错误重定向
command 2>&1 | tee output.log # 同时输出到终端和文件
1.4 用户与权限管理
# 添加用户
sudo adduser newuser
# 添加到 sudo 组
sudo usermod -aG sudo newuser
# 删除用户(保留主目录)
sudo deluser username
# 删除用户及主目录
sudo deluser --remove-home username
# 文件权限:rwx = 读(4) + 写(2) + 执行(1)
chmod 755 script.sh # 所有者全权限,其他人只读执行
chown user:group file # 修改文件所有者和所属组
常见系统用户组:
| 组名 | 权限说明 |
|---|---|
sudo |
可执行 sudo 提权 |
adm |
可读取日志文件 |
docker |
可操作 Docker |
www-data |
Web 服务运行用户 |
1.5 磁盘与文件系统管理
# 查看磁盘分区
lsblk
fdisk -l
# 分区工具
sudo fdisk /dev/sdb # 交互式分区
sudo parted /dev/sdb # 支持 GPT 分区
# 格式化文件系统
sudo mkfs.ext4 /dev/sdb1
sudo mkfs.xfs /dev/sdb1
# 挂载与卸载
sudo mount /dev/sdb1 /mnt/data
sudo umount /mnt/data
# 开机自动挂载 → 编辑 /etc/fstab
# 格式:设备 挂载点 文件系统 选项 dump pass
# /dev/sdb1 /mnt/data ext4 defaults 0 2
LVM 逻辑卷管理:
# 创建物理卷
sudo pvcreate /dev/sdb /dev/sdc
# 创建卷组
sudo vgcreate vg_data /dev/sdb /dev/sdc
# 创建逻辑卷
sudo lvcreate -L 100G -n lv_storage vg_data
# 扩展逻辑卷
sudo lvextend -L +50G /dev/vg_data/lv_storage
sudo resize2fs /dev/vg_data/lv_storage # 扩展文件系统
RAID 管理(mdadm):
# 创建 RAID 1(镜像)
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# 查看 RAID 状态
cat /proc/mdstat
# RAID 故障恢复
sudo mdadm --manage /dev/md0 --add /dev/sdd # 加入新盘重建
1.6 网络配置与远程管理
# 查看网络信息
ip addr show # IP 地址
ip route show # 路由表
cat /etc/resolv.conf # DNS 配置
# 查看监听端口
ss -tlnp # TCP 监听端口
lsof -i :80 # 查看 80 端口被哪个进程占用
SSH 安全加固:
# 编辑 SSH 配置
sudo vim /etc/ssh/sshd_config
# 推荐的安全配置
Port 2222 # 修改默认端口
PermitRootLogin no # 禁止 root 直接登录
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用密钥认证
# 生成密钥对(客户端执行)
ssh-keygen -t ed25519 -C "server-key"
# 上传公钥到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
UFW 防火墙基础:
sudo ufw enable # 启用防火墙
sudo ufw allow 22/tcp # 放行 SSH
sudo ufw allow 80,443/tcp # 放行 HTTP/HTTPS
sudo ufw allow from 192.168.1.0/24 # 放行内网网段
sudo ufw default deny incoming # 默认拒绝入站
sudo ufw status verbose # 查看规则列表
二、主流服务部署
2.1 文件共享服务 — Samba / NFS
Samba(跨平台文件共享,兼容 Windows):
sudo apt install samba -y
# 编辑配置
sudo vim /etc/samba/smb.conf
# 添加共享目录
[shared]
path = /srv/shared
browseable = yes
read only = no
valid users = @sambausers
# 添加 Samba 用户
sudo smbpasswd -a username
sudo systemctl restart smbd
NFS(Linux 间高性能文件共享):
# 服务端
sudo apt install nfs-kernel-server -y
sudo vim /etc/exports
# 添加:/srv/nfs 192.168.1.0/24(rw,sync,no_subtree_check)
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
# 客户端挂载
sudo mount -t nfs server_ip:/srv/nfs /mnt/nfs
2.2 Web 环境部署 — LNMP 架构
LNMP = Linux + Nginx + MySQL + PHP,是目前最主流的 Web 服务架构之一。
# 安装 Nginx
sudo apt install nginx -y
sudo systemctl enable nginx --now
# 安装 MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation # 安全初始化
# 安装 PHP 及常用扩展
sudo apt install php8.3-fpm php8.3-mysql php8.3-curl \
php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip -y
# Nginx 配置 PHP 转发
sudo vim /etc/nginx/sites-available/default
Nginx 关键配置片段:
server {
listen 80;
server_name example.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.3-fpm.sock;
}
}
2.3 数据库平台 — MySQL / PostgreSQL
MySQL 常用操作:
-- 创建数据库和用户
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
-- 备份与恢复
mysqldump -u root -p app_db > backup.sql
mysql -u root -p app_db < backup.sql
PostgreSQL 常用操作:
sudo apt install postgresql postgresql-contrib -y
sudo -u postgres psql
# SQL 操作
CREATE USER app_user WITH PASSWORD 'strong_password';
CREATE DATABASE app_db OWNER app_user;
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
# 备份与恢复
pg_dump -U app_user app_db > backup.sql
psql -U app_user app_db < backup.sql
2.4 DNS 与 DHCP 服务
BIND9 DNS 服务器:
sudo apt install bind9 -y
sudo vim /etc/bind/named.conf.local
# 添加正向解析区域
zone "example.local" {
type master;
file "/etc/bind/db.example.local";
};
ISC DHCP 服务器:
sudo apt install isc-dhcp-server -y
sudo vim /etc/dhcp/dhcpd.conf
# 基础配置
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 1.1.1.1;
}
2.5 VPN 服务 — WireGuard / Tailscale
WireGuard(轻量高效 VPN):
sudo apt install wireguard -y
# 生成密钥
wg genkey | tee privatekey | wg pubkey > publickey
# 配置 /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
PrivateKey = <服务端私钥>
ListenPort = 51820
[Peer]
PublicKey = <客户端公钥>
AllowedIPs = 10.0.0.2/32
Tailscale(零配置 Mesh VPN):
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# 登录后自动完成内网穿透,各节点自动组网
三、自动化运维与容器管理
3.1 Shell 脚本编程实战
#!/bin/bash
# 服务器健康检查脚本
THRESHOLD=80
ALERT_EMAIL="admin@example.com"
# CPU 使用率检查
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "WARNING: CPU usage at ${CPU_USAGE}%" | mail -s "CPU Alert" $ALERT_EMAIL
fi
# 磁盘使用率检查
df -h | awk 'NR>1 {if ($5+0 > 80) print "WARNING: "$6" at "$5}' | \
mail -s "Disk Alert" $ALERT_EMAIL
# 内存使用率检查
MEM_USAGE=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USAGE" -gt "$THRESHOLD" ]; then
echo "WARNING: Memory usage at ${MEM_USAGE}%" | mail -s "Memory Alert" $ALERT_EMAIL
fi
批量任务控制:
# 使用 for 循环批量操作
for server in node{01..10}.local; do
ssh $server "sudo apt update && sudo apt upgrade -y"
done
# 使用 xargs 并行处理
cat server_list.txt | xargs -P 4 -I {} ssh {} "uptime"
3.2 Docker 容器管理
# 安装 Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 基础操作
docker pull nginx:latest # 拉取镜像
docker run -d --name web -p 80:80 nginx # 运行容器
docker ps -a # 列出容器
docker logs -f web # 查看日志
docker exec -it web bash # 进入容器
# Docker Compose 编排
# docker-compose.yml 示例
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
常用 Docker 运维命令:
docker system prune -a # 清理未使用的所有资源
docker stats # 实时容器资源监控
docker inspect container_name # 查看容器详细信息
docker cp file.txt container:/path/ # 文件拷贝
3.3 Ansible 自动化运维
Ansible 是无代理架构的自动化运维工具,通过 SSH 管理远程节点。
# 安装 Ansible
sudo apt install ansible -y
# 编辑主机清单 /etc/ansible/hosts
[webservers]
web01 ansible_host=192.168.1.10
web02 ansible_host=192.168.1.11
[dbservers]
db01 ansible_host=192.168.1.20
Playbook 示例 — 一键部署 Nginx:
# deploy-nginx.yml
- name: Deploy Nginx on Web Servers
hosts: webservers
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: latest
update_cache: yes
- name: Start Nginx service
systemd:
name: nginx
state: started
enabled: yes
- name: Deploy custom index.html
copy:
content: "<h1>Welcome to {{ ansible_hostname }}</h1>"
dest: /var/www/html/index.html
执行:ansible-playbook -i hosts deploy-nginx.yml
3.4 资源监控工具
| 工具 | 用途 | 典型命令 |
|---|---|---|
top / htop |
实时进程和资源监控 | htop |
vmstat |
虚拟内存统计 | vmstat 1 5 |
iostat |
磁盘 I/O 统计 | iostat -x 1 |
iftop / nload |
实时网络流量 | iftop -i eth0 |
Glances |
全栈系统监控 | glances |
Prometheus + Grafana |
企业级监控面板 | Docker Compose 部署 |
# 安装 Glances
sudo apt install glances -y
glances -w # 启动 Web 模式,可通过浏览器访问
# 快速性能诊断
uptime # 系统负载
free -h # 内存使用
df -h # 磁盘空间
ss -s # Socket 统计
dmesg | tail -20 # 内核日志尾部
四、系统安全与稳定性保障
4.1 日志管理
# systemd journal 日志
journalctl -u nginx # 查看指定服务日志
journalctl -f # 实时跟踪
journalctl --since "1 hour ago" # 按时间过滤
# rsyslog 传统日志
tail -f /var/log/syslog
tail -f /var/log/auth.log # 认证日志
tail -f /var/log/nginx/access.log # Nginx 访问日志
日志轮转配置(logrotate):
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily # 每天轮转
rotate 14 # 保留 14 天
compress # 压缩旧日志
delaycompress # 延迟一次再压缩
missingok # 文件缺失不报错
notifempty # 空文件不轮转
postrotate
systemctl reload nginx > /dev/null
endscript
}
4.2 防火墙进阶配置
# iptables 基础规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 SSH
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP # 默认丢弃
iptables-save > /etc/iptables/rules.v4 # 持久化
# nftables(iptables 继任者)
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0\; }
sudo nft add rule inet filter input tcp dport {22, 80, 443} accept
4.3 入侵防御 — Fail2ban
sudo apt install fail2ban -y
# 创建自定义配置
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local 关键配置
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = 3600 # 封禁 1 小时
findtime = 600 # 10 分钟内
# 查看封禁状态
sudo fail2ban-client status sshd
sudo fail2ban-client unban <IP> # 解封 IP
4.4 账户安全策略
# 密码策略 → /etc/security/pwquality.conf
minlen = 12 # 最小长度
minclass = 3 # 至少 3 类字符
maxrepeat = 2 # 最多连续重复字符
# 账户锁定策略 → /etc/pam.d/common-auth
# 5 次失败后锁定 30 分钟
auth required pam_tally2.so deny=5 unlock_time=1800
# 禁用 root SSH 登录
sudo vim /etc/ssh/sshd_config
# PermitRootLogin no
# 定期审计登录记录
last -20 # 最近 20 次登录
lastb | head -20 # 最近 20 次失败登录
4.5 关键服务故障排查
服务无法启动排查流程:
# 1. 查看服务状态
systemctl status nginx
# 2. 查看详细日志
journalctl -u nginx -n 50 --no-pager
# 3. 测试配置文件语法
nginx -t
# 4. 检查端口占用
ss -tlnp | grep :80
# 5. 检查 SELinux/AppArmor
sudo aa-status | grep nginx
# 6. 测试网络连通性
curl -I http://localhost
性能瓶颈排查思路:
| 现象 | 排查方向 | 关键命令 |
|---|---|---|
| 响应慢 | CPU 瓶颈 | top、mpstat -P ALL 1 |
| 加载慢 | 磁盘 I/O | iostat -x 1、iotop |
| 并发慢 | 内存不足 | free -h、vmstat 1 |
| 连接超时 | 网络瓶颈 | ping、mtr、iftop |
| 偶发卡顿 | 进程异常 | strace -p PID、perf top |
五、运维最佳实践总结
5.1 日常运维检查清单
- 每日:检查系统负载(
uptime)、磁盘空间(df -h)、关键服务状态 - 每周:审查认证日志(
/var/log/auth.log)、检查 Fail2ban 封禁记录 - 每月:系统更新(
apt update && apt upgrade)、日志归档清理 - 每季:安全审计、备份恢复演练、SSL 证书到期检查
5.2 备份策略建议
3-2-1 备份原则:
- 3 份数据副本
- 2 种不同存储介质
- 1 份异地备份
# rsync 增量备份
rsync -avz --delete /data/ backup-server:/backup/data/
# 定时任务(每天凌晨 2 点)
# crontab -e
0 2 * * * rsync -avz /data/ backup-server:/backup/data/ >> /var/log/backup.log 2>&1
5.3 学习路线建议
| 阶段 | 周期 | 内容重点 |
|---|---|---|
| 入门 | 1-2 周 | 命令行基础、文件管理、用户权限 |
| 进阶 | 3-4 周 | 网络配置、服务部署(Nginx/MySQL)、Shell 脚本 |
| 熟练 | 2-3 月 | Docker、Ansible、LVM/RAID、防火墙与安全加固 |
| 精通 | 持续 | K8s、CI/CD、监控体系、高可用架构 |


