ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

零基础Linux运维实战:从虚拟机搭建到Shell脚本自动化

零基础Linux运维实战:从虚拟机搭建到Shell脚本自动化

如果你打算进入运维行业,或者在 2026 年想给自己补一门后端工程师的底层技能,Linux 命令这一关是绕不过去的。这篇教程不给你讲一堆抽象概念,而是直接走一条完整路径:先在你自己的电脑上把虚拟机装好,再把 Linux 系统部署起来,接着从最常用的命令开始一个个敲,最后落到服务部署和 Shell 脚本批量处理上。

整套内容不需要你有一台真实的服务器,不需要花钱买云主机,一台普通的 Windows 或 macOS 电脑就能完成。硬件门槛很低,重点是内存要够用:8GB 内存可以跑,16GB 内存会更舒服。如果你之前从来没有接触过 Linux,甚至不知道ls、cd、grep长什么样,这篇教程就是按零基础标准设计的。

正文会分成十个部分,从“教程内容速览”到“环境准备”,再到“虚拟机安装”“系统初始化”“命令实战”“服务部署”“脚本自动化”以及“故障排查”。每一段都包含可以直接上手的命令、操作步骤和判断标准。跟着操作完,你会发现 Linux 运维没有想象中那么神秘,它是一套完全可以靠练习掌握的手艺。

1. 教程内容速览

先看这张表,明确这次教程覆盖哪些内容,以及学完之后你能得到什么。

能力项说明
学习目标掌握从零搭建 Linux 学习环境、常用命令、服务部署和脚本自动化
虚拟化软件VMware Workstation / VirtualBox,二选一即可
操作系统镜像Ubuntu Server LTS / Rocky Linux / Debian,推荐 LTS 版本
硬件要求8GB 内存起步,16GB 更稳;CPU 支持并开启虚拟化;磁盘剩余 80GB 左右
核心技能Linux 文件操作、用户权限、进程网络、systemd 服务管理、Shell 脚本、cron 定时任务
实操产出一台本地 Linux 虚拟机、一个 Nginx Web 服务、一个可执行的批量脚本
是否需要真实服务器不需要
是否支持批量任务支持,通过 Shell 脚本实现批量用户创建、文件批量处理等
适合人群零基础转行运维、后端开发补技能、计算机专业学生

需要注意的是,文中涉及的具体命令在主流 Linux 发行版上基本通用。不同发行版的包管理命令略有差异,例如 Ubuntu/Debian 用apt,Rocky Linux/CentOS 用dnf,文中会分别说明。版本号建议选择长期支持版本,避免使用过于激进的新版本。

2. 适用场景与学习边界

这套 Linux 运维教程适合三类人:第一类是准备进入运维岗位的应届生或转行者,需要一份够扎实的实操经验;第二类是后端开发、测试工程师,日常要跟服务器打交道,补一补命令基础;第三类是计算机专业学生,上课学了理论、但还没在真实环境里敲过命令。

它能解决的实际问题包括:在自己电脑上搭建一套不破坏宿主机环境的 Linux 学习环境;掌握运维面试中最常问的文件操作、权限管理、进程查看、日志分析命令;学会部署一个真实的 Web 服务并查看运行状态;用脚本批量完成重复性工作,比如批量创建用户、批量打包日志、定时备份文件。

同时也需要说清楚边界。这套教程不覆盖云平台运维,比如阿里云、腾讯云上的产品操作;不深入内核参数调优、SELinux 复杂策略编写、大规模集群管理;也不涉及容器化编排。这些属于进阶内容,先把本地虚拟机里的基础命令和服务部署吃透,再往这些方向扩展会更顺利。

使用边界方面,所有操作都建议在本地虚拟机中完成,不要在生产环境毫无准备地执行高危险命令,比如rm -rf、强制重装软件包、随意修改系统关键配置。如果后续工作中需要操作真实服务器,要遵循公司的变更流程和合规要求。

3. 环境准备与前置条件

开始安装之前,先检查三件事:CPU 虚拟化是否开启、内存是否充足、磁盘剩余空间是否够用。

CPU 虚拟化检查方式按系统区分。Windows 系统打开任务管理器,切换到“性能”选项卡,看 CPU 部分是否显示“虚拟化: 已启用”。如果显示未启用,需要进 BIOS/UEFI 开启 Intel VT-x 或 AMD-V。macOS 的 Intel 芯片机型一般默认开启,Apple Silicon 机型使用虚拟机软件时会自动走虚拟化框架,不需要额外设置。

内存方面,建议 8GB 起步。虚拟机分配 4GB,宿主机剩余 4GB,日常操作会比较紧张但能跑。16GB 内存体验会明显改善,虚拟机可以分到 8GB。磁盘方面,虚拟机磁盘文件至少预留 60GB,建议预留 80GB,避免后期安装软件、日志增长导致空间不足。

接下来选择虚拟机软件。目前主流是两台:

软件优点缺点建议
VMware Workstation Pro性能好、硬件兼容性强、网络模式清晰商用收费,个人学习需要确认授权范围入门首选
VirtualBox开源免费、跨平台、轻量3D 性能较弱、部分版本对高版本 Windows 有兼容问题预算敏感用户

虚拟机软件的安装过程比较常规,下载安装包后双击运行,一路下一步即可。安装完成后先不要急着创建虚拟机,先去下载一个 Linux 系统镜像。

镜像下载建议选择长期支持版本:

  • Ubuntu Server LTS,适合新手,资料多,遇到问题容易搜索到答案
  • Rocky Linux 9.x,CentOS 停止维护后的主流替代之一,企业运维岗位常用
  • Debian,稳定、轻量,适合喜欢极简风格的人

下载时注意选择 ISO 文件,不要下载成 torrent 或压缩包。Ubuntu 镜像从官方源或授权镜像站下载,Rocky Linux 同理。下载完成后先校验一下文件完整性,Linux 官方页面都提供了 SHA256 校验值,Windows 下可以用certutil或 PowerShell 校验,macOS 下用shasum -a 256。

到这里,环境准备完成。准备的清单是:虚拟机软件、Linux ISO 镜像、足够的磁盘空间、开启虚拟化的 CPU。

4. 安装虚拟机并创建 Linux 环境

这一节以 VirtualBox 和 VMware 两个软件为例分别说明创建流程。核心步骤类似,差异在界面名称和引导方式。

4.1 使用 VirtualBox 创建虚拟机

打开 VirtualBox,单击“新建”。填写虚拟机名称,类型选择 Linux,版本根据镜像选择对应的 64 位系统。内存分配到 4096MB 或更高。硬盘选择“现在创建虚拟硬盘”,文件类型选 VDI,大小建议 60GB 以上,存储方式选“动态分配”,这样虚拟机里的系统实际用多少,宿主机磁盘就占多少,不会一次性占满。

创建完成后,在虚拟机设置里做三处调整:

  • 系统 -> 处理器:分配 2 核或 4 核
  • 存储:在光驱位置挂载之前下载的 ISO 文件
  • 网络:默认 NAT 模式即可,不影响后续安装和上网

调整完成后启动虚拟机,进入引导界面后选择“Install Ubuntu Server”或对应的系统安装选项。

4.2 使用 VMware Workstation 创建虚拟机

VMware 的流程更向导化。打开软件,选择“创建新的虚拟机”,选择“自定义”,操作系统选择“Linux”,版本选择对应的发行版 64 位。虚拟机名称和存储位置按习惯设置。处理器配置建议 2 核,内存 4096MB,网络类型选择 NAT。磁盘创建时选择“拆分成多个文件”,容量同样给到 60GB 以上。

创建完成后,在虚拟机设置里双击 CD/DVD 选项,选择“使用 ISO 映像文件”,指向下载好的镜像。启动虚拟机,开始系统安装。

4.3 Linux 系统安装关键步骤

不同发行版的安装界面有差异,但核心流程一致:

  1. 语言选择:保持默认英文即可。如果选中文,后续部分目录和提示会变成中文,反而给学习带来一些困扰。建议英文界面 + 中文学习资料配合。
  2. 网络配置:安装器一般会自动通过 DHCP 获取 IP。确保网络连接成功,否则后面更新软件源会失败。
  3. 磁盘分区:新手推荐选择“使用整个磁盘”并开启 LVM,系统自动完成分区,不需要手动调整。如果手动分区,建议分三块:/boot分配 1GB,swap分配内存同等大小或 2GB 左右,剩余空间全部给/。
  4. 用户名和主机名:创建一个普通用户,设置密码。主机名建议设置得短一点,方便记忆,例如linux01。
  5. 软件选择:如果使用 Ubuntu Server,在安装过程中可以选择是否安装 OpenSSH server,这里建议直接勾选,后续远程登录会用到。如果不勾选,系统装完后再通过apt install openssh-server安装。

安装完成后,系统会提示移除安装介质,重启虚拟机。重启后输入用户名密码登录,看到命令行提示符,说明系统安装成功。

5. 系统初始化与基础配置

系统装好只是开始,运维工作里第一时间要做的,是把系统调成方便使用的状态。以下几步是通用操作。

5.1 更新软件源

登录系统后,先更新包管理器的索引和已有软件包。

Ubuntu/Debian:

sudo apt update sudo apt upgrade -y

Rocky Linux/CentOS:

sudo dnf check-update sudo dnf update -y

这一步耗时取决于网络速度,完成之后保证系统处于最新状态,避免后续安装软件时出现依赖版本问题。

5.2 设置主机名

主机名是运维中最容易忽略但很重要的信息。后端服务器、数据库服务器、缓存服务器互相之间要能区分,靠的就是主机名。

sudo hostnamectl set-hostname linux01

修改后重新登录终端,提示符会显示新的主机名。

5.3 配置静态 IP

虚拟机默认通过 DHCP 获取 IP,优点是插上就能上网,缺点是重启后 IP 可能变化。学习阶段建议改成静态 IP,后面练 SSH、部署服务时会省去很多麻烦。

不同系统的配置方式不同。Ubuntu 22.04 之后的版本使用 netplan,配置文件在/etc/netplan/目录下:

sudo vi /etc/netplan/01-network-manager-all.yaml

参考配置如下:

network: version: 2 ethernets: enp0s3: dhcp4: no addresses: - 192.168.56.101/24 routes: - to: default via: 192.168.56.1 nameservers: addresses: [223.5.5.5, 8.8.8.8]

网卡名称可能不同,先用ip addr查看实际网卡名。应用配置:

sudo netplan apply

Rocky Linux 使用 NetworkManager,推荐用nmcli工具:

nmcli con mod "系统连接名称" ipv4.addresses 192.168.56.101/24 ipv4.gateway 192.168.56.1 ipv4.dns "223.5.5.5 8.8.8.8" ipv4.method manual nmcli con up "系统连接名称"

配置完成后,用ip addr确认 IP 已生效。

5.4 启用 SSH 远程登录

虚拟机的终端直接操作没问题,但实际运维场景通常是远程登录服务器。先把 SSH 服务确认启动。

Ubuntu/Debian:

sudo apt install openssh-server -y sudo systemctl enable --now ssh

Rocky Linux:

sudo dnf install openssh-server -y sudo systemctl enable --now sshd

检查监听状态:

sudo ss -tlnp | grep 22

看到 0.0.0.0:22 或 :::22 的监听记录,说明 SSH 服务正常。以后可以在宿主机上用终端工具远程连接这台虚拟机,操作体验和真实服务器一致。

6. Linux 基础命令实战

这一节是整篇教程的核心。命令看起来多,但不需要死记硬背,多用几次自然就记住了。下面按运维日常工作场景分组说明。

6.1 目录与文件操作

进入系统后第一件事,是搞清楚自己当前在哪个目录:

pwd

查看目录内容:

ls -l ls -a

切换目录:

cd /etc cd ~ cd -

创建目录:

mkdir -p /data/logs/web

创建空文件:

touch /data/test.txt

复制和移动:

cp -r /data/test.txt /tmp/ mv /data/test.txt /data/logs/web/

删除文件时格外小心:

rm -f /data/logs/web/test.txt

这里强烈建议养成一个好习惯:删除前先用ls确认路径,再执行删除。日常的教训大多来自路径写错或变量为空导致误删。

查看文件内容的几个命令:

cat /etc/os-release

查看大文件时用less,不要用cat直接输出,否则终端会被刷屏:

less /var/log/syslog

查看文件末尾内容并持续跟踪:

tail -f /var/log/syslog

6.2 用户与权限管理

运维工作中创建用户、切换用户、修改权限是高频操作。Linux 是多用户系统,权限设计决定了系统的安全性。

创建用户:

sudo useradd -m -s /bin/bash zhangsan sudo passwd zhangsan

-m表示创建家目录,-s指定默认 Shell。

删除用户:

sudo userdel -r zhangsan

权限修改,第一优先级命令是chmod。用数字方式理解权限:r 代表读,值 4;w 代表写,值 2;x 代表执行,值 1。

chmod 755 script.sh chmod 644 config.conf

修改文件属主:

sudo chown root:root /data/test.txt

查看当前用户身份:

whoami id

6.3 进程与系统状态

查看系统负载和进程占用:

top

按q退出。更直观的方式是使用htop,但需要安装:

sudo apt install htop -y

查看指定进程:

ps aux | grep nginx

结束进程:

kill PID kill -9 PID

kill -9是强制结束,不要在正常业务中滥用,优先使用普通kill,等待进程优雅退出。

查看内存使用:

free -h

查看磁盘空间:

df -hT

6.4 网络排查命令

网络问题是运维日常值班的高发问题,以下命令建议熟练到条件反射级别。

查看 IP 地址:

ip addr

查看端口监听:

ss -tlnp

测试主机连通性:

ping -c 4 223.5.5.5

测试端口连通性:

telnet 192.168.56.101 22

curl 是运维调试接口的利器:

curl -I http://127.0.0.1 curl -v http://127.0.0.1/api/health

抓包分析流量可以使用 tcpdump,这里暂不展开。

6.5 搜索与文本处理

每天处理最多的都是日志和配置文件,把下面这些命令练熟,效率会明显提高。

在文件内容中搜索关键词:

grep "ERROR" /var/log/syslog

递归搜索目录下所有文件:

grep -r "listen 80" /etc/nginx/

批量替换文件内容:

sed -i 's/old_port/8080/g' /etc/nginx/nginx.conf

提取文本列:

awk '{print $1, $2}' access.log

排序与去重:

sort access.log | uniq -c | sort -nr

查找文件所在位置:

find /data -name "*.log" -type f

6.6 压缩打包

日志备份、代码发布都离不开打包。

tar -czvf backup.tar.gz /data/logs tar -xzvf backup.tar.gz

解压到指定目录:

tar -xzvf backup.tar.gz -C /tmp/

到这里,你已经掌握了运维命令的八成常用量。剩下的主要是结合场景反复练习。

7. 服务部署实战:以 Nginx 为例

命令学完必须落到一个真实服务上,否则下一步很难推进。这里以 Nginx 为例,完成从安装、启动、配置静态站点到查看日志的完整流程。

7.1 安装 Nginx

Ubuntu/Debian:

sudo apt install nginx -y

Rocky Linux:

sudo dnf install nginx -y

7.2 启动与设置开机自启

sudo systemctl start nginx sudo systemctl enable nginx sudo systemctl status nginx

systemctl status输出中看到active (running)字样,说明服务正常。浏览器打开http://127.0.0.1,看到 Nginx 默认欢迎页,部署成功。

7.3 部署一个自定义站点

Nginx 的配置目录一般在/etc/nginx/sites-available/和/etc/nginx/conf.d/。创建一个站点配置文件:

sudo vi /etc/nginx/conf.d/web01.conf

参考配置:

server { listen 8080; server_name web01.local; root /var/www/web01; index index.html; access_log /var/log/nginx/web01_access.log; error_log /var/log/nginx/web01_error.log; }

创建站点目录和测试页面:

sudo mkdir -p /var/www/web01 echo "<h1>Linux 运维实战部署成功</h1>" | sudo tee /var/www/web01/index.html

重载 Nginx 配置:

sudo nginx -t sudo systemctl reload nginx

通过curl验证:

curl http://127.0.0.1:8080

如果能输出 HTML 内容,说明这个站点已经独立跑起来了。这里推荐自己做一个简单页面显示服务器当前状态,调用uname和uptime的输出,后面沙龙分享时会很有用。

7.4 日志查看与分析

Web 服务的流量和状态都记录在日志中。访问日志查看:

tail -f /var/log/nginx/web01_access.log

错误日志查看:

tail -f /var/log/nginx/web01_error.log

这段操作完成之后,你已经亲手实现了“系统部署 -> 服务安装 -> 配置修改 -> 验证运行 -> 日志分析”这个完整闭环。这个流程是所有运维工作的通用套路。

8. Shell 脚本与批量化操作

单条命令解决了单个问题,但运维工作中大量任务是重复性的。比如每天早上要压缩前一天日志,每周要备份配置目录,每季度要巡检所有虚拟机。这种场景就需要 Shell 脚本。

8.1 脚本基础结构

Shell 脚本本质是把多条命令按顺序组织在一个文件里,再给它执行权限。用#!/bin/bash开头声明解释器:

#!/bin/bash echo "开始备份..." mkdir -p /backup/$(date +%F) tar -czvf /backup/$(date +%F)/logs.tar.gz /var/log/nginx echo "备份完成"

8.2 变量与条件判断

#!/bin/bash LOG_DIR="/data/logs" BACKUP_DIR="/backup/$(date +%F)" if [ ! -d "$BACKUP_DIR" ]; then mkdir -p "$BACKUP_DIR" fi tar -czvf "$BACKUP_DIR/app_$(date +%H%M).tar.gz" "$LOG_DIR"

8.3 循环批量创建用户

运维入职最常见的脚本练习就是批量创建用户。下面这个脚本读取users.txt里的用户列表,逐个创建:

#!/bin/bash USER_LIST="/tmp/users.txt" while read username; do if id "$username" &>/dev/null; then echo "用户 $username 已存在,跳过" else sudo useradd -m -s /bin/bash "$username" echo "$username:123456" | sudo chpasswd echo "用户 $username 创建完成" fi done < "$USER_LIST"

调用方式:

echo -e "zhangsan\nlisi\nwangwu" > /tmp/users.txt bash /tmp/create_users.sh

8.4 定时任务

脚本写好后,需要按计划执行,这就用到 cron。编辑 crontab:

crontab -e

常用时间格式说明:

表达式含义
0 2 * * *每天凌晨 2 点
*/10 * * * *每 10 分钟一次
0 3 * * 1每周一凌晨 3 点
0 1 1 * *每月 1 日凌晨 1 点

示例:每天凌晨 2 点执行备份脚本,日志写入/var/log/backup.log:

0 2 * * * /bin/bash /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

查看已有定时任务:

crontab -l

删除全部定时任务需要谨慎操作:

crontab -r

到这里,你已经具备了用脚本把重复劳动自动化的能力。这个能力在后续工作和岗位晋升中很加分。

9. 性能观察与故障排查

实际工作中,Linux 故障排查的核心不是背命令,而是建立一套排查顺序:先看状态,再查日志,最后定位解决方案。这一节给出最常用的排查步骤。

9.1 CPU 和负载排查

使用top或uptime查看系统平均负载:

uptime

输出中load average三个数值分别代表 1 分钟、5 分钟、15 分钟的平均负载。如果三个值都很高,说明系统一直处于忙碌状态。

查看每个核心的占用:

mpstat -P ALL 1

9.2 内存排查

free -h

重点看available列,它代表当前还能分配给新应用的内存。used过高不代表系统一定有问题,因为 Linux 会尽量利用空闲内存做缓存,内存不足时再看si、so交换分区的读写情况。

vmstat 1

9.3 磁盘排查

df -hT

如果某个分区使用率超过 80%,需要分析占用来源:

du -sh /var/log /home /data 2>/dev/null | sort -rh

查找大文件:

find /data -type f -size +500M -exec ls -lh {} \;

9.4 日志排查

查看系统最近日志:

journalctl -xe

查看某个服务的完整日志:

journalctl -u nginx --since "1 hour ago"

查看内核相关的报错:

dmesg | tail -n 50

9.5 常见问题排查表

问题现象可能原因排查方式解决方案
虚拟机无法启动CPU 虚拟化未开启检查任务管理器/系统信息BIOS 开启 VT-x/AMD-V
虚拟机启动后没有 IPDHCP 未分配ip addr查看网卡切换到 NAT 模式或配置静态 IP
SSH 连接超时SSH 服务未启或防火墙拦截systemctl status ssh、ss -tlnp | grep 22systemctl enable --now ssh
apt update很慢默认源访问慢查看源配置换用国内镜像源
服务端口被占用其他进程占用端口ss -tlnp | grep 8080修改服务端口或结束占用进程
磁盘空间告警日志增长过快df -hT、du -sh清理旧日志并配置日志轮转
命令找不到软件包未安装which 命令apt install 软件包或dnf install 软件包
rm -f误删文件未备份无,只能接受教训实际操作前确认路径,养成备份习惯

10. 最佳实践与学习建议

教程最后给出一些工程化经验,这些经验比单个命令更值得收藏。

10.1 第一台虚拟机建议的最小配置

不要在一开始追求复杂的生产级架构。记住一个原则:先追求“跑起来”,再追求“规范化”。建议按以下顺序执行:

  1. 系统安装完成,更新源。
  2. 配置静态 IP 和主机名。
  3. 确认 SSH 可以远程登录。
  4. 安装 Nginx,部署第一个页面。
  5. 写一个简单备份脚本,设置 cron 自动执行。
  6. 测试一次从宿主机远程登录、检查服务、查看日志的完整闭环。

每一步做完就记录笔记。不需要复杂的文档工具,一个 Markdown 文件足够。

10.2 目录管理规范

以后接触真实服务器时,目录结构会直接影响可维护性。建议从现在开始培养习惯:

  • 脚本统一放在/opt/scripts/
  • 日志统一输出到/var/log/
  • 备份数据单独挂载到/backup/
  • 应用数据放在/data/

这个习惯可以避免后期出现“脚本到处都是、日志找半天”的混乱状态。

10.3 安全底线

本文所有实验都在本地虚拟机中进行。如果后续操作真实服务器,至少要遵守以下安全底线:

  • 不要使用 root 账号直接业务操作,使用普通用户加sudo
  • SSH 建议关闭密码登录,改用密钥认证
  • 不部署任何来历不明的脚本,不执行不看内容的远程脚本
  • 涉及个人信息、客户数据、生产环境的操作,必须遵守公司的合规审批流程
  • 定期备份重要配置和数据,备份完成后验证备份文件能恢复,而不是备份后就丢在一边

10.4 后续进阶方向

本地虚拟机这套环境跑熟之后,可以按下面几条线继续扩展:

  • 容器化方向:学习 Docker 基础操作,把 Nginx 换成容器部署
  • 自动化方向:学习 Ansible,用一台控制机管理多台虚拟机
  • 监控方向:部署 Prometheus + Grafana,给虚拟机加监控告警
  • 脚本方向:深入研究 Bash 脚本,把更多日常操作写成工具

真正上手快的人,通常都有一个共同习惯:拿到一台新机器,先把网络、SSH、包管理源、主机名搞定,然后立刻部署一个真实小服务。用这种最小闭环的方式练两三台虚拟机,Linux 运维操作的底子就打牢了。下一篇会继续拆 Docker 容器化部署和 Ansible 批量管理,建议先把本文的 Nginx 和脚本练习做完再往前推进。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进