ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux运维入门到实战:从基础命令到Nginx与MySQL部署

2026/9/6 23:39:24 拓冰建站 浏览量
Linux运维入门到实战:从基础命令到Nginx与MySQL部署 最近几年想转行做运维、或者从桌面运维往服务器运维方向发展的朋友明显变多了。大家遇到的第一个共同问题是Linux 到底该怎么学网上资料确实很多但普遍存在两个问题要么零散不成体系从头到尾全是命令堆砌不知道业务场景里到底怎么用要么上来就讲内核、讲源码对新手太劝退。这篇文章我会围绕“零基础转行运维”的真实路径来写从 Linux 是什么、为什么运维必须掌握它到环境安装、常用命令、用户权限、systemd 服务管理、网络配置再到 Nginx、MySQL 这类企业级中间件的部署实战最后补充高频排查思路和工程习惯。内容适合零基础入门也适合具备一定桌面维护经验、想把技能体系补全的开发者。文章里的命令和配置都以“能复制、能运行”为标准示例环境用虚拟机加 CentOS/Rocky Linux 来做演示。版本不同会有细微差异但核心思路是一致的。1. 背景与核心概念1.1 Linux 到底是什么为什么运维绕不开它Linux 是一款开源的多用户、多任务操作系统内核。我们平时说的“装了个 Linux 系统”实际指的是基于 Linux 内核发行的完整操作系统比如 CentOS、Rocky Linux、Ubuntu Server、Debian、openEuler、统信 UOS 等。你在网上搜“Linux 常用命令大全”“Linux 运维招聘要求”时会发现几乎所有服务器相关岗位都要求掌握 Linux。原因很直接互联网公司的服务器绝大多数跑在 Linux 上无论是 Web 服务、数据库还是中间件。云服务器阿里云 ECS、腾讯云 CVM、华为云 ECS默认提供的主流操作系统镜像都以 Linux 发行版为主。Linux 的命令行管理方式决定了运维工作的核心是“在终端里高效操作”而不是靠鼠标点击。开源生态成熟Nginx、MySQL、Redis、Kafka、Spring Boot 应用等服务在 Linux 上部署最顺畅。可以这么理解Linux 是服务器世界的地基。你后续学中间件、学容器、学自动化运维、学云计算底层都要跟 Linux 打交道。1.2 桌面运维与服务器运维有什么区别很多朋友之前做的是桌面运维日常工作是装系统、装软件、维护打印机、处理办公软件故障。这部分工作确实会用到 Linux比如给国产化终端装 UOS、麒麟系统使用“桌面运维助手”“Livetools”这类工具箱处理系统问题。但企业级服务器运维跟桌面运维的侧重点很不一样对比维度桌面运维服务器运维操作对象个人电脑、办公外设服务器、集群、中间件、数据库操作方式图形界面为主命令行为主稳定性要求故障影响单个用户故障影响整个业务核心能力软硬件排错、外设维护服务部署、监控、优化、排障关注指标用户满意度可用性、性能、安全如果你打算转行做运维建议直接往服务器运维方向走因为天花板更高而且很多能力可以迁移比如排错思路、日志分析、变更管控等等。1.3 企业级中间件是什么中间件是介于操作系统与应用之间的软件层作用是屏蔽底层差异为应用提供通用服务。运维岗位里最常见的中间件包括Web 服务器 / 反向代理Nginx、Apache。应用服务器Tomcat、Undertow常用于运行 Java Web 应用。消息中间件Kafka、RabbitMQ、RocketMQ用于异步解耦、削峰填谷。缓存中间件Redis用于热点数据缓存、分布式锁。数据库中间件MyCat、ShardingSphere用于分库分表、读写分离。实际招聘中尤其是中小企业要求通常是“掌握 Linux 基础 能部署维护常见的中间件 会写基础脚本”。这篇文章会带你把最核心的链路打通先看懂系统再学会部署服务。2. 环境准备与版本说明2.1 需要准备什么学习 Linux 不一定非要买服务器。在你自己的电脑上装一个虚拟机就完全够用了。推荐组合如下操作系统Windows 10/11或者 macOS。虚拟机软件VMware Workstation Pro或者 VirtualBox。Linux 发行版Rocky Linux 9.x / CentOS Stream 9 / Ubuntu Server 22.04 LTS。终端工具Windows 建议用 PowerShell 或 Windows Terminal。SSH 工具Xshell、FinalShell、MobaXterm 都可以主要用于远程连接 Linux 虚拟机。如果机器配置一般虚拟机内存分配 2 GBCPU 给 2 核磁盘 40 GB 就够了。实际使用中你还要跑 Nginx、MySQL、Redis建议内存尽量给到 4 GB。2.2 本文示例环境当前没有统一的“官方最新版本”可以固定推荐因为 Linux 发行版迭代很快厂商支持策略也在调整。所以本文采用通用示例Linux 发行版Rocky Linux 9.x兼容 CentOS 的使用习惯。系统架构x86_64。操作方式命令行 systemd 管理服务。中间件Nginx、MySQL。包管理器dnf / yum。需要说明的是如果你用的是 Ubuntu用apt安装软件包即可目录结构大体一致配置文件路径稍有差异本文示例以 RHEL 系为主。2.3 安装过程极简步骤用虚拟机安装 Linux 的完整步骤比较长这里给出关键流程下载 Rocky Linux 的 DVD ISO 镜像。新建虚拟机选择“稍后安装操作系统”。虚拟机设置里挂载 ISO 镜像。启动虚拟机进入安装界面。选择安装语言建议选 English避免中文乱码。磁盘分区保持默认自动分区即可。设置 root 密码创建普通用户。安装完成后重启登录系统。运行下面命令确认系统基本信息cat /etc/os-release uname -r hostnamectl如果能看到系统名称、内核版本、主机名说明安装成功。free -h df -h这两条命令用于查看内存和磁盘信息运维基础命令之一。3. 核心知识拆解运维必须掌握的基础模块3.1 Linux 目录结构初学者最大的困惑是Linux 为什么不像 Windows 那样有 C 盘 D 盘其实 Linux 是一个单一根目录结构所有文件和设备都挂载在/下。常用的目录目录用途/etc系统配置文件目录改配置基本都在这里/var变化的数据如日志、缓存、队列/usr系统软件资源类似 Windows 的 Program Files/opt可选的应用软件目录/home普通用户的家目录/rootroot 用户的家目录/tmp临时文件/proc内核和进程信息的虚拟文件系统/var/log日志文件目录排错经常在这里一次比较常见的排查路径是应用起不来先到/var/log/messages或者/var/log/nginx/error.log里看报错。3.2 常用命令速查Linux 命令不需要死记硬背但下面这些必须熟练。我按场景分组来写。第一个场景文件操作。pwd # 查看当前目录 cd /etc # 切换目录 ls -l /etc/passwd # 长格式列出文件详情 touch test.txt # 新建空文件 mkdir -p /data/logs # 递归创建目录 cp /etc/hosts /tmp/hosts.bak # 复制文件 mv /data/a.txt /data/b.txt # 移动或重命名 rm -rf /tmp/testdir # 递归强制删除慎用第二个场景内容查看与文本处理。cat /etc/hostname # 查看文件全部内容 head -n 5 /var/log/messages # 查看文件前5行 tail -f /var/log/nginx/access.log # 实时跟踪日志 grep error /var/log/messages # 按关键字过滤 awk {print $1, $7} /var/log/nginx/access.log # 取第1列和第7列 sed -n 10,20p /var/log/messages # 打印第10到20行第三个场景进程与系统状态。top # 实时查看资源占用 ps -ef | grep java # 查找进程 kill -9 12345 # 强制结束进程 systemctl status nginx # 查看服务状态 ss -lntp # 查看监听端口第四个场景网络操作。ip addr # 查看网卡 IP ip route # 查看路由 ping -c 4 baidu.com # 测试连通性-c 指定次数 curl -v http://localhost:8080 # 测试 HTTP 接口 ssh root192.168.1.10 # 远程登录 scp /tmp/a.txt root192.168.1.10:/tmp # 远程复制文件这些命令看起来零散但实际工作时是组合使用的。比如排查线上 Nginx 响应慢常用流程是top看机器负载tail -f看访问日志curl测试接口ss看端口状态。3.3 用户与权限Linux 是多用户系统权限设计是安全的基础。核心知识点有两个文件权限和 sudo 提权。查看文件权限ls -l /etc/shadow输出类似这样---------- 1 root root 1470 Jun 25 14:22 /etc/shadow第一段----------是权限位共 10 个字符。第一个字符表示文件类型-表示普通文件d表示目录l表示软链接。后面 9 个字符分成三组分别是 属主权限、属组权限、其他人权限。每组三位顺序是 读 r、写 w、执行 x。权限修改常用命令chmod 755 /opt/script.sh # 属主可读写执行组和其他人可读执行 chown root:root /opt/script.sh # 修改属主和属组新增用户和提权useradd tom # 新建用户 passwd tom # 为用户设置密码 useradd -m -s /bin/bash devops # 创建用户并指定家目录和 shell usermod -aG wheel devops # 将用户加入 wheel 组获得 sudo 权限在 RHEL 系发行版中wheel 组的用户默认可以通过sudo提权。实际工作中尽量不要直接用 root 操作而是用普通用户加sudo这样有审计记录也能减少误操作风险。3.4 软件包管理RHEL 系使用 dnf老版本是 yumDebian 系使用 apt。安装软件、升级软件、卸载软件都应该走包管理器而不是从网上随意下载二进制包。软件包管理常用命令dnf update -y # 更新所有软件包 dnf install -y vim wget tar # 安装软件包 dnf remove -y httpd # 卸载软件包 dnf list installed | grep nginx # 查看是否安装过 dnf info nginx # 查看软件包信息使用包管理器的好处是能够自动解决依赖关系、统一管理版本也方便后续升级和卸载。编译安装适合需要自定义编译参数的场景新手阶段不建议一上来就编译安装。4. 完整实战从零部署 Nginx MySQL 环境下面进入核心实战环节。我们要完成一件事在一台刚装好的 Linux 虚拟机上通过命令行安装并配置 Nginx 和 MySQL让 Nginx 能访问 MySQL并验证服务能正常启动、端口能正常监听。这一套流程做完你就掌握了服务器运维最基础也是最高频的能力部署服务、修改配置、启动验证、查看日志。4.1 创建项目结构约定所有应用数据都放在/data下日志放在/data/logs下。这个习惯很重要后边维护会省很多事。sudo mkdir -p /data/www sudo mkdir -p /data/logs/nginx sudo mkdir -p /data/logs/mysql创建测试页面目录sudo mkdir -p /data/www/html4.2 安装 Nginx先更新软件源缓存再安装 Nginxsudo dnf install -y nginx启动服务并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx检查服务状态sudo systemctl status nginx正常会显示 active (running)。再检查端口监听sudo ss -lntp | grep 80如果服务没起来先看错误日志sudo tail -f /var/log/nginx/error.log4.3 配置 Nginx 虚拟主机修改 Nginx 配置让访问 80 端口时跳转到我们创建的测试页面。sudo vim /etc/nginx/conf.d/test.conf写入以下内容server { listen 80; server_name localhost; access_log /data/logs/nginx/access.log; error_log /data/logs/nginx/error.log; location / { root /data/www/html; index index.html; } }创建一个测试页面sudo bash -c echo h1Hello Linux Nginx/h1 /data/www/html/index.html检查配置语法sudo nginx -t重新加载配置sudo systemctl reload nginx用 curl 验证curl http://localhost预期输出页面内容。4.4 安装 MySQLRHEL 系默认源里没有 MySQL只有 MariaDB。这里我们以 MySQL 官方仓库安装为例演示企业里最常见的安装方式。先添加 MySQL 官方 Yum 仓库sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm安装 MySQL 社区版sudo dnf install -y mysql-community-server启动服务sudo systemctl start mysqld sudo systemctl enable mysqld4.5 初始化数据库并创建测试库安装完成后MySQL 会自动生成一个临时 root 密码存放在日志里sudo grep temporary password /var/log/mysqld.log用临时密码登录mysql -uroot -p按提示输入临时密码然后执行以下 SQLALTER USER rootlocalhost IDENTIFIED BY Your_Strong_Passwd_2026; CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8mb4; SHOW DATABASES;注意MySQL 8.0 默认密码策略较强建议密码包含大小写字母、数字和特殊字符否则会报密码强度不足。生产环境更不要使用弱密码。4.6 验证 Nginx 与 MySQL 连通性这里做一个最简单的演练Nginx 提供一个 PHP 或 Shell 方式的测试接口不太合适我们直接通过命令行确认 Nginx 进程存在、MySQL 端口正常然后用 curl 确认 Web 服务正常就可以认为部署链路是通的。sudo systemctl status nginx sudo systemctl status mysqld ss -lntp | grep -E :(80|3306) curl -I http://localhost预期能看到 nginx 和 mysqld 都是 active (running)80 和 3306 端口都在监听。到这里你已经独立完成了一台服务器的核心服务部署。后面在这个基础上可以继续部署 Redis、Tomcat、RabbitMQ、Kafka 或者 Java 应用思路完全一致安装、配置、启动、验证。5. 常见问题与排查思路5.1 高频问题速查表问题现象常见原因解决思路虚拟机无法联网网卡未启动或 DHCP 未获取 IP用ip addr查看网卡状态修改/etc/sysconfig/network-scripts/下配置或使用 NetworkManager 管理连接安装软件包提示 “No match for argument”软件源里没有该软件先执行dnf update -y或安装 epel-release 扩展源Nginx 启动失败端口被占用或者配置文件语法错误执行nginx -t检查语法ss -lntp查看端口占用查看/var/log/nginx/error.logMySQL 临时密码找不到日志轮转或安装异常检查/var/log/mysqld.log若没有可以执行mysqld --initialize-insecure重新初始化测试环境可用sudo 提示用户不在 sudoers 中用户未加入管理员组用 root 执行usermod -aG wheel 用户名或者编辑/etc/sudoers文件权限不足导致服务无法读配置属主或权限设置错误用ls -l查看属主属组chown和chmod进行调整防火墙挡掉了业务端口firewalld 未放行端口执行firewall-cmd --permanent --add-port80/tcp firewall-cmd --reload5.2 排查思路三步定位法我强烈建议新手养成一个固定排查顺序先看服务状态和日志。systemctl status查看服务是否活着journalctl -u 服务名 -n 50查看最近日志。再看端口和进程。ss -lntp确认端口是否监听ps -ef确认进程是否存在。最后看配置文件。检查语法、路径、权限用nginx -t或mysqld --validate-config这类自检命令。按这个顺序排查大部分部署问题都能在 10 分钟内定位。5.3 新手最容易犯的三个错误第一个错误是在 root 权限下随意修改系统文件。建议除非必要情况否则只使用 sudo 执行具体命令。第二个错误是改完配置后没有先检查语法就重启服务。Nginx、MySQL、systemd 服务都有自己的检查命令先检查再 reload能省去很多故障时间。第三个错误是不区分发行版就照抄命令。你在网上搜到的大部分命令基于 CentOS 7 或 Ubuntu直接拿到 Rocky Linux 9 上不一定能用文件路径和包名都有差异。遇到报错先看发行版版本。6. 最佳实践与工程建议6.1 主机名与目录规划主机名建议使用“业务-角色-环境”格式例如web-prod-01、mysql-test-02。不要用localhost或者随便的英文名。sudo hostnamectl set-hostname web-prod-01部署目录建议统一规划比如应用代码放/data/app/。日志放/data/logs/。备份放/data/backup/。临时文件放/data/tmp/。6.2 配置文件管理Linux 配置文件改动前先备份。一条很简单的习惯cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak-$(date %F)改配置时加上注释写明修改人、修改日期、修改原因。这会让你一个月后回看时轻松很多。6.3 安全最小权限原则root 远程登录建议改用普通用户加 sudo。SSH 端口不建议直接用默认 22改成其他端口可以降低被扫描的概率。服务端口只开放必要的用firewall-cmd精确放行。数据库、Redis 等存储类服务不要对所有 IP 开放监听地址建议只绑定内网 IP。生产环境禁止使用弱密码MySQL 和 Redis 一定要设置密码。6.4 日志是运维的半条命系统日志在/var/log/messages服务日志各有路径。日常巡检建议关注几个关键指标/var/log/messages里有没有 kernel error 或 OOM。服务日志里有没有持续刷 ERROR 或 WARN。磁盘空间是否充足日志是否在做按天或按大小轮转。日志轮转配置在/etc/logrotate.d/下例如 Nginx 日志轮转可以这样配置/data/logs/nginx/*.log { daily rotate 30 compress missingok notifempty sharedscripts postrotate /bin/kill -USR1 $(cat /var/run/nginx.pid 2/dev/null) 2/dev/null || true endscript }6.5 脚本化与自动化运维工作重复性高能脚本化的尽量脚本化。写 Shell 脚本时注意开头加#!/bin/bash和注释。使用set -e或set -o pipefail让脚本遇到错误及时退出。涉及生产变更时加交互确认和日志记录。重要脚本收在代码仓库里不要散落在服务器上。一个简单的备份脚本示例#!/bin/bash # 功能备份 MySQL testdb 数据库 # 使用./backup_db.sh set -e BACKUP_DIR/data/backup DB_NAMEtestdb DB_USERroot DB_PASSYour_Strong_Passwd_2026 DATE$(date %F_%H%M%S) mkdir -p ${BACKUP_DIR} mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} | gzip ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz echo 备份完成${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz记得给脚本加上执行权限chmod x backup_db.sh6.6 变更流程意识无论是改配置、升级内核、重启服务还是执行批量命令都应该先在测试环境验证再在生产环境操作操作前做备份操作后做验证大变更要有回滚方案。不要小看这条习惯它决定了你能不能从“会敲命令”进阶到“能扛生产”。7. 总结与学习路线到这里我们从零完成了 Linux 环境准备、目录结构、常用命令、用户权限、软件包管理、systemd 服务管理以及 Nginx 和 MySQL 的部署验证。整个过程没有依赖图形界面全是命令行操作这也是运维日常工作的真实状态。关于下一步的学习方向按这个顺序走会比较顺Shell 脚本编程。条件判断、循环、函数、文本处理三剑客 grep / awk / sed能把自己从重复操作里解放出来。网络基础。TCP/IP 分层、HTTP 协议、DNS 解析流程、常用端口。排障离不开这些。中间件深入。Redis 缓存策略、RabbitMQ / Kafka 消息队列、Nginx 负载均衡与反向代理配置。自动化运维。Ansible 批量管理、Shell 脚本规范落地、监控系统Prometheus Grafana搭建。容器与云原生。Docker 容器化、docker-compose 编排、Kubernetes 入门。这是目前运维岗位的高频要求但它一定建立在扎实的 Linux 基础上。实际项目中最优先关注的三个风险点权限控制是否到位备份恢复是否可靠变更操作是否可回滚。这三个点不出问题系统就不会出大问题。建议你从今天开始动手做一件事装一台 Linux 虚拟机把本文的命令全部敲一遍把 Nginx 和 MySQL 的部署流程再走一遍。命令可以忘但“安装-配置-启动-验证-看日志”这套流程一定要形成肌肉记忆。遇到报错不要慌先看日志再去搜索引擎查关键词很多时候错误信息已经把答案告诉你了。