跳到主内容

Linux 运维入门教程(2026):从系统管理、Docker、Nginx 到 Ansible 全面学习指南

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

GSProber · 主机测评编辑21 阅读
零基础学习 Linux 运维,这篇教程涵盖 Linux 系统基础、Ubuntu 安装、Shell 命令、用户权限、磁盘…

一、基础与系统管理

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 命令行基础

Bash
# 命令结构:命令名 [选项] [参数]
ls -la /home           # 列出 /home 目录下所有文件的详细信息
grep -r "error" /var/log  # 递归搜索含 error 的日志

常用 Bash 快捷键:

快捷键 功能
Ctrl + A 光标移到行首
Ctrl + E 光标移到行尾
Ctrl + U 清除光标前内容
Ctrl + R 搜索历史命令
Tab 命令/路径自动补全

管道与重定向:

Bash
# 管道:将前一命令的输出作为后一命令的输入
ps aux | grep nginx

# 输出重定向
ls -la > file_list.txt      # 覆盖写入
echo "追加" >> log.txt      # 追加写入

# 错误重定向
command 2>&1 | tee output.log   # 同时输出到终端和文件

1.4 用户与权限管理

Bash
# 添加用户
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 磁盘与文件系统管理

Bash
# 查看磁盘分区
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 逻辑卷管理:

Bash
# 创建物理卷
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):

Bash
# 创建 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 网络配置与远程管理

Bash
# 查看网络信息
ip addr show              # IP 地址
ip route show             # 路由表
cat /etc/resolv.conf      # DNS 配置

# 查看监听端口
ss -tlnp                  # TCP 监听端口
lsof -i :80               # 查看 80 端口被哪个进程占用

SSH 安全加固:

Bash
# 编辑 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 防火墙基础:

Bash
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):

Bash
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 间高性能文件共享):

Bash
# 服务端
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 服务架构之一。

Bash
# 安装 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 关键配置片段:

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 常用操作:

SQL
-- 创建数据库和用户
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 常用操作:

Bash
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 服务器:

Bash
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 服务器:

Bash
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):

Bash
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):

Bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# 登录后自动完成内网穿透,各节点自动组网

三、自动化运维与容器管理

3.1 Shell 脚本编程实战

Bash
#!/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

批量任务控制:

Bash
# 使用 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 容器管理

Bash
# 安装 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 运维命令:

Bash
docker system prune -a          # 清理未使用的所有资源
docker stats                    # 实时容器资源监控
docker inspect container_name   # 查看容器详细信息
docker cp file.txt container:/path/  # 文件拷贝

3.3 Ansible 自动化运维

Ansible 是无代理架构的自动化运维工具,通过 SSH 管理远程节点。

Bash
# 安装 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:

YAML
# 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 部署
Bash
# 安装 Glances
sudo apt install glances -y
glances -w   # 启动 Web 模式,可通过浏览器访问

# 快速性能诊断
uptime                # 系统负载
free -h               # 内存使用
df -h                 # 磁盘空间
ss -s                 # Socket 统计
dmesg | tail -20      # 内核日志尾部

四、系统安全与稳定性保障

4.1 日志管理

Bash
# 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):

Bash
# /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 防火墙进阶配置

Bash
# 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

Bash
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 账户安全策略

Bash
# 密码策略 → /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 关键服务故障排查

服务无法启动排查流程:

Bash
# 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 瓶颈 topmpstat -P ALL 1
加载慢 磁盘 I/O iostat -x 1iotop
并发慢 内存不足 free -hvmstat 1
连接超时 网络瓶颈 pingmtriftop
偶发卡顿 进程异常 strace -p PIDperf top

五、运维最佳实践总结

5.1 日常运维检查清单

  • 每日:检查系统负载(uptime)、磁盘空间(df -h)、关键服务状态
  • 每周:审查认证日志(/var/log/auth.log)、检查 Fail2ban 封禁记录
  • 每月:系统更新(apt update && apt upgrade)、日志归档清理
  • 每季:安全审计、备份恢复演练、SSL 证书到期检查

5.2 备份策略建议

Plain Text
3-2-1 备份原则:
- 3 份数据副本
- 2 种不同存储介质
- 1 份异地备份
Bash
# 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、监控体系、高可用架构
教程平时玩 VPS、AI 服务器、Docker 或者折腾各种网络环境时,经常会遇到各种问题,比如想查 IP 信息、测试网络…

GSVPS 实用工具导航:20 个值得收藏的第三方工具推荐,服务器、AI 和开发用户必备

平时玩 VPS、AI 服务器、Docker 或者折腾各种网络环境时,经常会遇到各种问题,比如想查 IP 信息、测试网络、检测 DNS、查看 BGP 路由、部署模型等等。很多时候,并不需要自己搭建工具,其实网上已经有不少非常优秀的免费服务。

305 阅读

教程GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebR…

Cloudflare Workers 免费搭建开源远程桌面完整教程:无需 VPS,支持 WebRTC P2P、D1、KV、R2、浏览器远程控制、Windows 客户端和文件传输

GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebRTC P2P 直连,服务端仅负责 API、身份认证和 WebSocket 信令,不中转桌面视频流,大幅降低服务器带宽成本。项目支持 Cloudflare 免费套餐 部署,也可以使用 Docker 在 VPS 上自托管,内置 Windows 客户端、浏览器控制端、手机远程控制,支持 8 位设备 ID、OTP 一次性密码、永久密码、Ed25519 设备认证、JWT 身份验证、文件传输、剪贴板同步、自动重连 等完整功能。

307 阅读

要闻如果你不想依赖 Cloudflare,也希望把远程桌面平台完全部署在自己的服务器上,那么 GsDesk 同样支持 VP…

GsDesk VPS 自托管教程:Docker 部署开源远程桌面,支持 WebRTC P2P、浏览器远程控制

如果你不想依赖 Cloudflare,也希望把远程桌面平台完全部署在自己的服务器上,那么 GsDesk 同样支持 VPS 自托管。GsDesk 的 VPS 版本采用 Node.js + Hono + SQLite 构建后台,支持 Docker Compose 一键部署,提供 API、WebSocket 信令以及浏览器远程控制界面。整个协议与 Cloudflare 版本保持一致,只需一台 Linux VPS,就能快速搭建属于自己的远程控制平台。

81 阅读

常见问题

如何在Linux服务器上禁止SSH密码登录,只允许密钥认证?

编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no 禁止root直接登录、PasswordAuthentication no 禁用密码登录、PubkeyAuthentication yes 启用密钥认证;客户端用 ssh-keygen -t ed25519 生成密钥对,再用 ssh-copy-id 上传公钥到服务器。

如何用LVM扩展Linux磁盘的逻辑卷?

先用 pvcreate 创建物理卷、vgcreate 创建卷组,再用 lvcreate -L 100G -n lv_storage vg_data 创建逻辑卷;需要扩容时执行 lvextend -L +50G /dev/vg_data/lv_storage,再用 resize2fs 扩展文件系统使其生效。

Fail2ban怎么配置才能防止SSH被暴力破解?

复制 /etc/fail2ban/jail.confjail.local,在 [sshd] 段设置 enabled=truemaxretry=5bantime=3600(封禁1小时)、findtime=600(10分钟内),之后可用 fail2ban-client status sshd 查看封禁状态,用 fail2ban-client unban <IP> 解封。

用Ansible一键部署Nginx的Playbook怎么写?

编写hosts为webservers、become为yes的playbook,任务依次是用apt模块安装nginx(state: latest)、用systemd模块启动并enable nginx服务、用copy模块部署index.html,最后执行 ansible-playbook -i hosts deploy-nginx.yml 即可批量部署到多台主机。

评价与回复

无需登录;审核通过后公开显示。