我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

Linux运维零基础入门:虚拟机搭建到Nginx部署完整实战

Linux运维零基础入门:虚拟机搭建到Nginx部署完整实战 在运维岗位的日常工作中Linux 几乎是无处不在的基础设施。无论是线上服务器、数据库中间件还是容器化环境绝大多数底层系统都运行在 Linux 之上。很多刚接触运维的同学最头疼的不是某个命令不会用而是不知道从哪开始学、怎么把零散的知识串起来。网上资料虽然多但要么只讲命令不讲场景要么直接丢一堆配置文件让人照抄缺乏一条从零到一的完整链路。这篇文章打算梳理一套适合零基础入门的 Linux 学习路径从虚拟机搭建开始到熟悉常用命令、掌握系统管理方法最后落地一个真实的服务器部署案例帮助你建立运维工程师的第一课知识框架。本文适合完全没有接触过 Linux 的新手也适合已经会一些命令但缺少系统化思路的初级运维或开发同学。你不需要提前准备服务器也不需要购买云主机只要一台普通的 Windows 电脑配合虚拟机软件就能完成全部实验。整篇文章会分成几个部分先说明为什么运维工程师必须先学 Linux再带你一步步创建虚拟机、安装系统接着拆解高频命令和系统管理技巧最后演示如何在 Linux 上部署 Nginx Web 服务并附上常见问题排查思路。读完以后你可以照着文中的步骤亲手操作一遍把这条链路真正跑通。1. 为什么运维工程师的第一课是 Linux先看一个很现实的问题企业里的服务器绝大多数跑的是什么系统答案很明确Linux 系操作系统占据了服务器市场的绝对主流。无论是传统的 CentOS、Ubuntu、Debian还是国内常用的 openEuler、统信 UOS底层都遵循 Linux 内核设计。运维工程师日常打交道最多的对象不是漂亮的图形界面而是黑底白字的终端窗口是 Shell 命令行是 systemd 服务是各种各样的配置文件。从技能体系来看Linux 是运维工程师的地基。网络配置、用户权限、磁盘管理、进程调度、日志分析、服务部署、Shell 脚本自动化这些核心工作全部围绕 Linux 展开。如果你不懂 Linux那么后续学习 Docker、Kubernetes、Ansible、监控系统都会遇到巨大阻力。因为这些工具本质上都是运行在 Linux 之上的应用和服务很多排错思路最终都要回到 Linux 系统层面去分析。再从学习成本来看Linux 相关的学习资源极其丰富而且可以通过虚拟机在本地自由实验。你不需要担心把系统搞坏虚拟机快照随手一拍出了问题秒级回滚。这种低成本试错的环境对新手极其友好。所以把虚拟机搭建和 Linux 基础命令作为运维入门第一课几乎是所有从业者的共识。下面我们直接从实际操作开始。我没有选择云服务器作为第一站而是先使用 VMware 虚拟机搭建本地实验环境原因很直接虚拟机在网络隔离、快照备份、系统重装等方面非常灵活适合反复折腾。等你在虚拟机上把命令和服务都练熟了再接触真实服务器心态会稳很多。2. 环境准备选择合适的虚拟机和 Linux 镜像2.1 虚拟机软件选择目前主流的个人电脑虚拟机软件主要有 VMware Workstation Pro 和 Oracle VM VirtualBox。两者都可以用来创建 Linux 虚拟机功能上各有优势VMware Workstation Pro界面友好功能完善对硬件兼容性好是很多教程和企业的首选。新版提供了个人免费许可适合学习使用。Oracle VM VirtualBox开源免费安装包较小基本功能够用适合低配置电脑。本文以 VMware Workstation 为示例讲解因为它在网络模式设置、虚拟机克隆、快照管理方面比较直观新手不容易踩坑。如果你电脑上已经安装了 VirtualBox操作思路同样适用只是个别按钮名称略有不同。2.2 Linux 发行版如何选Linux 有很多发行版不同发行版的包管理器、默认目录结构、服务管理方式存在差异。新手容易陷入选择困难这里给一个简单的参考CentOS Stream / Rocky Linux / AlmaLinux企业级发行版和 Red Hat Enterprise LinuxRHEL兼容适合学习企业运维环境。早期教程多基于 CentOS 7但 CentOS 7 已停止维护建议学习 Rocky Linux 9 或 AlmaLinux 9。Ubuntu Server / Ubuntu Desktop社区活跃资料多软件包更新快适合用来学习通用 Linux 操作。服务器版没有图形界面更贴近生产环境。Debian稳定、简洁、占用资源少适合对系统原理有兴趣的同学。零基础入门我更推荐使用 Rocky Linux 9 或 Ubuntu Server 22.04 LTS。两者都拥有长期维护周期网上相关教程丰富遇到问题比较容易搜到解决方案。本文后面的安装和命令示例将以 Rocky Linux 9 为例但绝大多数命令在 Ubuntu 上同样适用。2.3 镜像下载注意事项不要随便在第三方网站下载系统镜像尽量去发行版官方网站下载。比如 Rocky Linux 官方提供 DVD ISO 和 Minimal ISO 两种镜像Minimal 镜像体积小、安装快适合学习服务器安装如果希望安装时就有图形界面可以选择 DVD 镜像。下载时注意选择 x86_64 架构目前大多数个人电脑都是这个架构。3. 在 VMware 中创建 Linux 虚拟机3.1 创建虚拟机的基本流程打开 VMware Workstation点击“创建新的虚拟机”。建议选择“自定义高级”模式这样可以手动控制硬件配置而不是使用 VMware 的默认简化配置。关键配置点如下虚拟机兼容性保持默认即可一般 Workstation 会给出建议值。安装来源选择“稍后安装操作系统”这样可以先创建空虚拟机再手动挂载 ISO 镜像。如果直接选择“安装程序光盘映像文件”VMware 会自动检测系统类型但有时会触发简易安装流程自动创建用户反而让新手看不懂系统初始化过程。客户机操作系统选择 Linux版本选择对应发行版。如果是 Rocky Linux 9选择 Red Hat Enterprise Linux 9 或 CentOS 9 的兼容选项都可以。处理器和内存建议分配 2 核 CPU、4GB 内存如果本机内存紧张2GB 也能跑起来只是编译和安装软件时会慢一些。磁盘容量建议设置 20GB 以上选择“将虚拟磁盘存储为单个文件”性能稍好。自定义硬件在“新 CD/DVD”中选择“使用 ISO 映像文件”指向你下载好的 Linux 镜像。这里还要特别提一个非常常见的报错。很多同学在打开虚拟机时遇到类似“VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录、以及访问该程序使用的所有临时文件。”的提示然后虚拟机黑屏或者无法启动。这个问题通常和 Windows 的 Hyper-V 功能冲突、VMware 服务未启动、或者杀毒软件拦截有关。排查顺序建议是先检查 VMware 的 Authorization Service 是否运行再确认 Windows 功能中 Hyper-V 是否关闭最后尝试以管理员身份运行 VMware。这个问题不是系统装坏了往往是宿主机环境的问题。3.2 调整虚拟机设置创建完成后先不要直接开机。在虚拟机设置里确认两件事网络适配器新手阶段建议选择“NAT 模式”。NAT 模式下虚拟机可以访问外网宿主机也能通过虚拟 IP 访问虚拟机但局域网内的其他物理机无法直接访问。这是最安全的实验网络环境。USB 控制器如果用不到 USB 设备可以移除减少启动时的不必要报错。然后开启虚拟机进入系统安装界面。3.3 安装 Rocky Linux 9 系统系统启动后选择第一项“Install Rocky Linux 9”进入安装程序。安装过程中几个需要重点注意的选项如下Installation Destination选择安装磁盘。如果不手动分区直接点击 Done安装器会自动使用 LVM 分区方案。新手建议先使用自动分区等熟悉以后再学手动分区。Root Password设置 root 密码这是系统最高权限账号密码要足够复杂。User Creation创建一个普通用户同时勾选“Make this user administrator”这样该用户可以 sudo 提权。Software Selection新手可以选“Server with GUI”带一个简单的图形界面降低陌生感等熟悉命令行以后再改用 Minimal 安装。安装过程大概需要几分钟到十几分钟取决于电脑性能和镜像大小。安装完成后重启执行初始配置比如接受许可协议、配置时区等。到这里一台 Linux 虚拟机就算正式建好了。4. Linux 基本概念与目录结构4.1 命令行和 Shell进入 Linux 系统后你可以打开终端也可以直接按 CtrlAltF2 切换到命令行登录界面。Linux 下所有操作都可以通过命令行完成命令行解释器叫作 Shell。最常见的 Shell 是 Bash。Shell 的作用很简单接收你输入的命令解析后交给操作系统内核执行然后把结果显示出来。新手刚接触命令时不需要急着背选项而是先掌握一个公式命令 [选项] [参数]比如ls -l /etc其中ls是命令-l是选项以长格式显示/etc是参数要查看的目录。很多命令也支持长选项比如--all。4.2 Linux 目录结构Linux 的目录结构和 Windows 差异很大。Windows 有 C 盘、D 盘而 Linux 所有文件和目录都从根目录/开始形成一棵倒置的目录树。初学阶段先记住几个常用目录即可/ 系统根目录 /bin 普通用户可执行命令 /sbin 系统管理命令通常需要 root 权限 /etc 系统和服务配置文件 /home 普通用户家目录 /root root 用户家目录 /var 日志、缓存、临时文件等动态数据 /tmp 临时文件目录 /usr 已安装的应用程序和系统资源 /proc 虚拟文件系统保存内核和进程信息为什么一定要懂目录结构因为运维排错时大部分时间都在这些目录里穿行。比如查看系统日志去/var/log修改网卡配置去/etc/sysconfig/network-scripts/或使用/etc/NetworkManager/不同发行版略有差异安装的软件放在/usr下。知道去哪里找文件比背命令重要得多。4.3 用户与权限模型Linux 是多用户操作系统每个文件和目录都有属主、属组和其他用户的权限。权限分为读r、写w、执行x三种分别用数字 4、2、1 表示。比如常见的755表示属主有读写执行权限属组和其他用户只有读和执行权限。查看文件权限ls -l输出类似-rw-r--r--. 1 root root 1234 Oct 22 10:00 test.txt这条输出里第一个字符-表示普通文件如果是d表示目录。后面的rw-r--r--就是权限位。修改权限使用chmod命令chmod 750 test.txt chown root:root test.txt理解权限模型后你就明白为什么有些文件能读不能执行为什么有些目录不能随便删。运维工作中权限配置不当是安全事件的高发原因最小权限原则要从第一天就刻在脑子里。5. Linux 常用命令系统学习5.1 文件与目录操作命令先来看一组最高频的文件目录命令。这些命令几乎每天都会用到。pwd # 查看当前所在目录 cd /etc # 切换目录 ls -l # 以长格式列出目录内容 cp -r /opt/test /tmp/ # 递归复制目录 mv file1 file2 # 移动或重命名文件 rm -rf /tmp/test # 强制递归删除慎用 mkdir -p /data/logs # 递归创建目录 touch newfile.txt # 创建空文件或更新时间戳 find /etc -name *.conf # 查找文件 grep -r listen /etc/ # 递归搜索文件内容这里特别要提醒的是rm -rf命令。很多教学视频为了省事经常用rm -rf删除文件但在真实环境中一个手滑可能把整个系统删掉。建议在使用删除命令前先用ls看清楚路径或者先mv到临时目录观察再确认删除。生产环境删除操作必须在备份或者快照之后执行。5.2 查看文件内容查看文件内容有几种常用方式不同场景选择不同命令cat /etc/passwd # 直接输出全部内容 less /var/log/messages # 分页查看支持上下翻页 tail -f /var/log/nginx/access.log # 实时跟踪日志输出 head -n 20 /etc/services # 查看文件前 20 行tail -f是运维排查问题时的神级命令。比如服务突然异常你可以一边复现问题一边在另一个终端窗口实时观察日志输出定位报错信息。5.3 文本处理三剑客grep、sed、awkLinux 运维绕不开文本处理尤其是处理日志和配置文件时grep、sed、awk三个命令的组合非常强大。grep用于过滤匹配行grep ERROR /var/log/app.log grep -i error /var/log/app.log # 忽略大小写 grep -v ^# /etc/ssh/sshd_config # 过滤掉注释行sed用于流式编辑文本sed -i s/oldhost/newhost/g /etc/hosts # 把所有 oldhost 替换为 newhost sed -n 10,20p /etc/services # 查看第 10 行到第 20 行awk用于按列处理文本awk {print $1, $NF} /var/log/nginx/access.log这个命令的意思是把日志文件的每一行按空格拆分成多列打印第一列和最后一列。比如分析 Nginx 访问日志第一列通常是客户端 IP最后一列通常是 User-Agent 或响应时间看需求而定。5.4 网络命令Linux 下网络排查命令是运维必备技能。先看几个最基础的ip addr # 查看网卡和 IP 地址 ip route # 查看路由表 ping -c 4 baidu.com # 测试网络连通性 ss -tlnp # 查看监听端口和对应进程 curl -I http://localhost # 测试本地 Web 服务 hostname # 查看主机名这里想特别说说telnet命令。在搜索引擎中经常看到“telnet 命令怎么用”的搜索词。telnet 本身是一个远程登录协议但它并不安全因为数据是明文传输。现代运维中使用 telnet 更多是用来测试某个端口是否连通比如telnet 192.168.1.10 22如果你看到 Connected 或类似回显说明目标 IP 的 22 端口是开放的。不过现在很多系统默认不安装 telnet 客户端需要使用ncnetcat或者nmap来替代。比如nc -vz 192.168.1.10 22这两种方式的目的都是一样的测试端口连通性。但千万不要在生产环境用 telnet 远程管理服务器那比裸奔还危险。5.5 Shell 与命令帮助遇到不认识的命令怎么办用man查看帮助手册man ls按 q 退出帮助页面。还有一个help命令用于查看 Shell 内置命令的帮助help cd另外history可以查看历史命令记录这个命令在排错时很有价值你可以通过它复盘自己在服务器上执行过哪些操作。6. Linux 系统管理核心技能6.1 用户与用户组管理运维工程师在管理服务器时要养成不随意使用 root 操作的习惯因此用户管理是必备技能。常用命令如下useradd zhangsan # 创建用户 passwd zhangsan # 设置密码 usermod -aG wheel zhangsan # 将用户加入 sudo 组 userdel -r zhangsan # 删除用户及家目录 id zhangsan # 查看用户信息为什么强调普通用户 sudo 的管理模式原因有两个一是避免误操作root 权限太大敲错命令可能直接导致系统瘫痪二是方便审计sudo 操作会被记录到日志出了问题方便追溯谁在什么时候执行了什么命令。6.2 systemd 服务管理现代主流 Linux 发行版都使用 systemd 管理服务。曾经的service命令和chkconfig命令已经逐渐淡出现在推荐使用systemctl。常用命令如下systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl enable nginx # 设置开机自启 systemctl status nginx # 查看服务状态systemctl status输出中包含服务主进程 PID、内存占用、最近日志等信息是排查服务异常的入口。6.3 进程管理查看进程和资源占用是运维的基本功top # 动态查看系统资源占用 ps aux --sort-%cpu # 查看进程列表按 CPU 从高到低排序 kill -9 PID # 强制结束进程慎用top命令界面中按 P 按 CPU 排序按 M 按内存排序按 q 退出。如果觉得 top 显示的信息不够直观可以安装htop显示效果更友好但大多数服务器上默认只有 top所以还是建议先把 top 用熟。6.4 磁盘与文件系统管理查看磁盘使用情况df -h这个命令会显示每个挂载点的容量和使用率。如果某个分区使用率达到 100%服务可能马上报“磁盘空间不足”错误所以运维定期巡检时df -h是必看项。查找大文件可以结合du和sortdu -h --max-depth1 /var 2/dev/null | sort -hr | head -206.5 日志管理与系统状态日志是排错的第一手资料。日志目录集中在/var/log/常见的几个日志文件如下/var/log/messages # 系统通用信息日志 /var/log/secure # 安全认证相关日志 /var/log/cron # 定时任务日志 /var/log/dmesg # 内核环形缓冲区日志查看登录成功和失败记录last # 登录成功记录 lastb # 登录失败记录如果你的服务器发现异常登录优先查看/var/log/secure里的 SSH 登录记录。7. 实战案例在 Linux 上部署 Nginx Web 服务命令学了一堆如果没有一个综合项目串联起来很容易忘。下面我们通过一个常见的运维场景把前面学到的知识点串起来在 Rocky Linux 9 虚拟机上部署 Nginx并通过 Shell 命令验证服务状态。7.1 安装 NginxRocky Linux 9 默认软件源中包含 Nginx直接使用 dnf 安装sudo dnf install -y nginx安装完成后先启动 Nginx 并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx sudo systemctl status nginx如果你在终端看到类似Active: active (running)的输出说明服务已经正常运行。7.2 配置防火墙Rocky Linux 默认可能开启了 firewalld 防火墙如果不放行 HTTP 端口外部无法访问 Web 服务。执行以下命令sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --reload这里强调一下生产环境修改防火墙策略前务必确认自己已经通过控制台或者其他带外通道保留了访问权限否则一旦把 SSH 端口误屏蔽可能把自己锁在服务器外面。7.3 修改 Nginx 默认页面先备份原始配置这是一个非常重要的运维习惯sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak编辑配置文件修改默认 server 模块或自定义站点配置。这里我们演示一个最简单的自定义站点sudo vim /etc/nginx/conf.d/demo.conf写入如下内容server { listen 80; server_name demo.local; location / { root /usr/share/nginx/html; index index.html index.htm; } }保存退出后先测试配置语法sudo nginx -t看到syntax is ok和test is successful后重载 Nginxsudo systemctl reload nginx这里使用 reload 而不是 restart原因是 reload 会让 Nginx 平滑加载新配置不会中断正在处理的请求对在线服务更友好。7.4 验证部署结果在虚拟机本机验证curl -I http://localhost如果看到HTTP/1.1 200 OK说明 Web 服务正常。接着修改默认页面内容echo h1Hello Linux Ops/h1 | sudo tee /usr/share/nginx/html/index.html再次访问curl http://localhost浏览器输出你设置的 HTML 内容。到这里你已经完成了一个最小可用的 Web 服务部署流程。这个过程涉及了软件包管理、systemd 服务管理、防火墙配置、文本编辑、网络测试、日志查看等多方面的知识。7.5 使用快照保护实验环境部署完 Nginx 后建议立即在 VMware 中拍摄一个快照。快照的作用是保存虚拟机当前状态之后无论你怎么折腾系统比如误删关键文件、配置改坏都能快速恢复到快照状态。这是运维学习中最重要的安全网比任何命令都实用。拍摄快照的时机建议是系统刚安装完、配置好基础环境、完成一次完整实验后分别打一个快照。这样你就有多个“存档点”可以大胆试错。8. Linux 学习过程中的常见问题与排查思路新手在安装和使用 Linux 虚拟机时经常会遇到一些问题。下面整理了出现频率较高的几类以及对应的排查思路。问题现象常见原因解决思路VMware 无法启动虚拟机提示“无法连接到虚拟机”Hyper-V 功能冲突、VMware 服务未运行、权限不足关闭 Windows Hyper-V启动 VMware Authorization Service以管理员身份运行虚拟机安装 Linux 时蓝屏或卡死CPU 虚拟化未开启、镜像架构不匹配进 BIOS 开启 VT-x/AMD-V确认镜像为 x86_64 架构安装完成后无法上网网卡未激活或 DHCP 获取失败ip addr查看网卡nmcli device connect eth0激活重启网络服务使用 sudo 提示用户不在 sudoers 中用户没有提权权限用 root 登录执行usermod -aG wheel 用户名端口明明开放但外部访问不到防火墙未放行或服务只监听本机检查ss -tlnp监听地址放行 firewalld 对应端口执行 rm 删错文件手误或路径写错提前备份使用ls确认路径建议使用mv到临时目录替代删除中文乱码系统未安装中文字体或语言包安装langpacks-zh_CN设置LANGzh_CN.UTF-8排查问题的通用思路是先确认服务状态再看日志最后检查权限和配置。不要一上来就重装系统那会失去排错锻炼的机会。9. 运维工程师的 Linux 最佳实践建议掌握了基础命令和部署流程后再往深走就要注重工程化习惯的养成了。这里分享几点对新人最有价值的建议。第一养成备份和自定义配置先备份的习惯。修改任何系统级配置文件之前都先复制一份备份文件。比如修改/etc/ssh/sshd_config前先执行cp备份。这个习惯在初期可能觉得多余但到了生产环境它真的能救你一次。第二尽量不用 root 执行日常命令。root 权限太大容易把系统搞坏。日常操作使用普通用户遇到需要提权的场景用 sudo。这样操作命令都会被记录系统也会更安全。第三把命令理解成“组合技能”来学。单个命令容易背但真实场景往往是多个命令配合。比如排查 Nginx 访问量最高的 IP你需要用到cat、awk、sort、uniq、head这些命令的组合。建议在学习过程中刻意练习这种“管道思维”把一个复杂任务拆解成多个小步骤用|连接起来。比如awk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10这条命令的意思是提取访问日志第一列 IP排序统计每个 IP 出现次数按次数从高到低排序列出前 10 个。它能帮你快速找到访问量最大的客户端地址。第四重视日志但不要只看日志。日志能告诉你系统发生了什么但有时候日志不会记录所有信息。比如网络丢包问题可能需要抓包分析磁盘 IO 问题需要用iostat查看。日志是起点不是终点。第五学习过程中刻意练习“最小化思维”。每次部署服务时先思考这台服务器需要什么软件、开放什么端口、启动什么服务然后一点一点加。不要一上来就关闭防火墙、禁用 SELinux、把所有服务都装一遍。严格限制系统暴露面对运维安全至关重要。10. 总结与下一步学习方向通过这篇文章你已经完成了一条完整的学习链路从创建 Linux 虚拟机到熟悉目录结构和常用命令再到掌握 systemd 服务管理和系统管理方法最后亲手部署了一个 Nginx 服务。这套流程覆盖了运维工程师日常工作中很大一部分基础场景。以后不管是去维护云服务器还是学习自动化运维工具这套基础能力都会持续发挥作用。下一步可以沿着几个方向继续深入一是学习 Shell 脚本编程把重复性操作写成脚本这是运维自动化的起点二是学习网络基础理解 IP 地址、子网掩码、路由、DNS 解析这是排查网络故障的前提三是尝试部署更完整的应用程序比如安装 Java 环境、部署 Tomcat、配置 MySQL 数据库感受一下真实业务系统的全貌。Linux 的学习不像某些编程语言那样可以快速看到炫酷成果它的进步更多体现在“遇到问题能自己搞定”的底气上。如果你在实验过程中遇到了报错不要急着搜答案先自己看报错信息、查日志、分析可能的原因这个过程比命令本身更值钱。希望这篇教程能成为你运维之路的第一块垫脚石亲手把环境搭起来跑通一个服务你会发现 Linux 并没有想象中那么难。
返回列表