大家好,我是你们的老朋友。
断断续续有读者在后台留言,说想转行做运维,或者刚入行没多久,面对 Linux 系统总觉得心里没底。网上的教程东一块西一块,命令背了又忘,遇到系统报错也不知道从哪里下手。今天这篇文章,我想彻底换一种方式,把 Linux 从入门到进阶这条路上的核心知识点、常见操作、实战案例和坑点,一次性系统性地梳理清楚。
这篇文章我会围绕“Linux 系统安装、常用命令、用户与权限、进程网络管理、Shell 脚本、实战部署、故障排查”这些核心模块展开。无论你是刚接触 Linux 的小白,还是有 Windows 使用经验想转 Linux 的开发者,或者正准备入行运维工程师,都可以按照这个体系一步步走下来。
整个内容是一条完整的学习链路,建议先收藏,再跟着动手实践。毕竟 Linux 这东西,光看不练永远学不会。
1. 先搞清楚:Linux 到底是什么,为什么运维必学
1.1 用一句通俗的话理解 Linux
Linux 本质上是一个操作系统内核(Kernel),它负责管理计算机的硬件资源,并为上层应用提供运行环境。我们平时提到的“Linux 系统”,其实是包含了内核和一系列基础软件的完整操作系统发行版,比如 CentOS、Ubuntu、Rocky Linux、Debian、麒麟(Kylin)等。
打个比方:如果把一台电脑比作一栋楼,硬件是地基和墙体,Linux 内核就是水电和管道系统——看不见,但没有它整栋楼就无法运转。而用户平时操作的各种命令、工具和软件,则是楼里的家具和电器,它们都构建在内核之上。
1.2 Linux 与 Windows 的核心区别
很多新手刚接触 Linux 时很不适应,这是正常的。它和 Windows 的设计哲学有着本质区别:
| 对比项 | Windows | Linux |
|---|---|---|
| 文件组织 | 按盘符分区(C盘、D盘) | 一切从/根目录开始,统一目录树 |
| 操作方式 | 图形界面为主 | 命令行为核心,图形界面只是可选组件 |
| 软件安装 | 下载 exe/msi 双击安装 | 使用包管理器(apt/yum/dnf)安装 |
| 权限模型 | 默认管理员权限较大 | 严格区分普通用户与 root,一切皆文件 |
| 稳定性 | 相对较弱,需定期重启 | 服务器常连续运行数月或数年不重启 |
正是由于 Linux 在稳定性、安全性和资源占用方面的天然优势,全球绝大多数服务器都运行在 Linux 之上。企业级后端服务、云计算平台、容器(Docker/Kubernetes)底层,几乎清一色是 Linux。
1.3 运维工程师为什么要死磕 Linux
运维工程师的核心职责是保证服务器稳定、高效、安全地运行。而服务器市场的操作系统份额中,Linux 占据了主导地位。可以这么说:Linux 是运维工作的“母语”。
如果不懂 Linux,你连服务器都登不上去;如果只懂一些基础命令,遇到系统崩溃、服务启动失败、磁盘写满、权限错乱等问题时,也完全没有排查思路。熟练的 Linux 操作能力,是运维岗位的基础门槛,也是资深运维和普通网管之间的分水岭。
2. 环境准备:从零开始拥有一台 Linux 机器
2.1 安装方式的取舍
想要学习 Linux,第一步是拥有一台可以随意折腾的 Linux 环境。一般有三种方式:
- 虚拟机安装(最推荐初学者)。在 Windows/Mac 上使用 VMware Workstation 或 VirtualBox 安装 Linux 发行版。优点是可以随时快照和回滚,不用担心弄坏系统。
- 物理机安装(进阶)。在旧电脑上直接安装 Linux,适合想完全切换操作系统、深入接触硬件驱动的场景。
- 云服务器(生产实战)。阿里云、腾讯云、华为云等平台申请一台按量付费的 ECS,可以让你提前接触真实的生产环境。虽然需要少量费用,但网络、安全组和运维流程都是企业级的。
本文以虚拟机安装为主进行演示,因为它的容错率最高,最适合新手。
2.2 发行版选择建议
很多新手第一次安装 Linux 时,会被各种发行版名称搞晕。这里给大家一个参考建议:
- 零基础入门,选 Ubuntu Desktop 或 Linux Mint。资料多、社区活跃、图形界面友好,遇到问题很容易搜到答案。
- 面向企业运维、服务器方向,选 Rocky Linux(CentOS 停止维护后的替代方案)或 Ubuntu Server。企业生产环境中这两种系统占了很大比例。
- 国产化场景,可以了解麒麟操作系统。在部分国产化替换项目中,麒麟系统的使用越来越常见,学习方式与通用 Linux 基本一致,命令和包管理器的思路是相通的。
版本方面不建议盲目追求“最新”。需要注意的是,不同发行版使用的包管理器不同:Debian/Ubuntu 使用apt,RHEL/CentOS/Rocky 使用yum或dnf。实际项目中要根据公司环境灵活切换。
2.3 虚拟机安装 Rocky Linux 实战步骤
我们以 VMware Workstation + Rocky Linux 9 为例,演示完整安装过程。
2.3.1 创建虚拟机
打开 VMware Workstation,点击“创建新的虚拟机”,选择“典型”配置即可。语言选择英文或中文都行,磁盘大小建议至少分配 20GB,内存建议 2GB 以上。
2.3.2 引导安装
将下载好的 Rocky Linux ISO 镜像挂载到虚拟机的 CD/DVD 光驱,启动虚拟机后进入安装引导界面。选择第一项“Install Rocky Linux 9”。
安装过程中有几个关键配置项需要重点说明:
- Installation Destination(安装目标):如果是一台新虚拟机,直接选择自动分区即可。生产环境建议手动分区,其中
/boot分区 1GB 左右,/根分区根据需求分配,swap 分区大小按内存的 1 到 2 倍分配即可。 - Root Password(root 密码):必须设置,这是以后管理系统最高权限的入口。
- User Creation(创建用户):建议创建一个普通用户用于日常登录,同时勾选“Make this user administrator”,避免天天用 root 操作。
安装完成后重启,移除 ISO 镜像,输入账号密码登录,到这里一台基础的 Linux 虚拟机就已经准备好了。
2.4 远程连接工具:用 XShell 或 FinalShell 登录
生产环境中的 Linux 服务器都在机房或云上,你不可能抱着显示器去操作。实际工作中,99% 的场景是通过 SSH 远程连接服务器。这里推荐几款常见的 SSH 客户端:
- XShell:老牌工具,功能强大。
- FinalShell:国产工具,自带服务器状态监控,适合新手。
- MobaXterm:自带多标签和文件管理,体验优秀。
连接前需要先查看虚拟机的 IP 地址。登录虚拟机后执行:
ip addr如果命令不存在,可以试试:
ifconfig找到类似192.168.x.x的地址,然后在 SSH 工具中输入该 IP,端口默认 22,用户名填刚才创建的普通用户,连接后输入密码即可。
这里有个常见坑点:虚拟机默认使用 NAT 模式联网时,IP 地址可能会因为 DHCP 租约变化而改变。如果发现下次连接时 IP 变了,可以配置静态 IP,或在路由器/VMware 中设置 IP 保留。这个问题在后面的章节会详细说。
3. Linux 核心知识拆解:命令、文件与权限体系
学 Linux 的本质,其实是学会“和操作系统对话”。而这种对话,主要依靠命令行。下面我们分模块来拆解。
3.1 你必须掌握的常用命令
我见过很多人买了一堆命令大全,但真正用到的就那么几十条。这里按功能分类,把最高频、最核心的命令梳理出来。
文件与目录操作
ls # 列出当前目录内容 ll # 等价于 ls -l,查看详细信息 cd /etc # 切换目录 pwd # 查看当前所在目录 mkdir test # 创建目录 touch a.txt # 创建空文件 cp a.txt b.txt # 复制文件 mv a.txt /tmp/ # 移动或重命名文件 rm -rf test/ # 删除目录,慎用!-rf 没有确认提醒 find / -name "*.log" # 按名称查找文件这里必须提醒:rm -rf是初学者最容易翻车的命令。这条命令会静默、递归、强制删除指定内容,一旦路径写错,后果不可挽回。建议在服务器上执行删除操作时,先ls确认路径,再执行删除。
查看文件内容
cat a.txt # 一次性查看全部内容 less a.txt # 分页查看,按 q 退出,适合大文件 head -20 a.txt # 查看前 20 行 tail -50 a.txt # 查看后 50 行 tail -f a.txt # 实时跟踪文件输出,排查日志神器 grep "error" a.txt # 按关键词过滤内容系统状态查看
top # 动态查看 CPU、内存、进程占用 free -h # 查看内存使用情况 df -h # 查看磁盘分区使用情况 du -sh /var/log # 查看目录占用空间 ps -ef # 查看当前所有进程3.2 一切皆文件:Linux 目录结构详解
Linux 中最核心的设计思想就是“一切皆文件”。硬件设备、进程信息、系统配置都以文件形式暴露在目录树中。理解下面的目录结构,你就能明白 Linux 系统的骨架了:
| 目录 | 作用 |
|---|---|
/ | 根目录,整个文件系统的起点 |
/etc | 系统配置文件所在地,如网络、用户、服务配置 |
/var | 经常变化的数据,如日志、缓存、任务队列 |
/usr | 系统软件和应用程序的主要安装位置 |
/home | 普通用户的家目录 |
/root | root 用户的家目录 |
/tmp | 临时文件目录,系统重启后会清理 |
/proc | 虚拟文件系统,展示内核和进程的实时信息 |
举个例子,如果你要修改主机名称,改的就是/etc/hostname文件;如果你想查看 CPU 信息,直接cat /proc/cpuinfo。理解这个思想后,很多问题就变得清晰了——所谓配置系统,本质上就是编辑合适的文件。
3.3 用户与权限:运维安全的第一道防线
Linux 是多用户操作系统,权限管理直接决定系统安全。我们用ls -l看到的权限信息,看起来是一串字符,实际上有严格的含义:
-rw-r--r-- 1 root root 1024 Mar 12 10:00 test.txt拆解来看:
- 第 1 位
-表示文件类型,d是目录,l是软链接。 - 第 2-4 位
rw-是文件所有者(owner)的权限:读、写、执行。 - 第 5-7 位
r--是所属组(group)的权限。 - 第 8-10 位
r--是其他用户(others)的权限。
权限也可以用数字简化表示:读(r)= 4,写(w)= 2,执行(x)= 1。所以chmod 644 file的含义是:所有者读写,组和其他人只读。
常用用户管理命令:
useradd zhangsan # 创建用户 passwd zhangsan # 设置或修改密码 userdel -r zhangsan # 删除用户且删除家目录 groupadd devops # 创建用户组 usermod -aG devops zhangsan # 将用户加入组 su - root # 切换用户 sudo command # 以 root 权限执行命令在企业中,强烈不建议直接用 root 操作服务器。正确做法是给每个运维人员创建独立账号,按需授予 sudo 权限。这样既能保证操作完整性,出了问题也方便溯源。
3.4 网络与进程管理:运维日常两件套
服务器出问题时,大部分排查动作都离不开网络和进程。
网络排查常用命令:
ping baidu.com # 测试网络连通性 ip addr # 查看 IP 地址 curl -I http://localhost # 查看 HTTP 响应头 ss -tlnp # 查看端口监听状态 telnet 192.168.1.10 8080 # 测试远程端口是否通系统维护常用进程命令:
systemctl status nginx # 查看服务状态 systemctl start nginx # 启动服务 systemctl enable nginx # 设置开机自启 kill -9 12345 # 强制结束进程(谨慎) pkill -f java # 按名称结束进程(谨慎)从 CentOS 7 开始,服务管理统一使用systemctl,这是学习现代 Linux 必须掌握的工具。systemctl的核心优势在于它整合了服务的启动、停止、重启、查看状态、开机自启等全部操作。
4. 完整实战案例:从零部署一台 Web 服务器
理论知识看再多,不如动手跑一遍。这一节我们做一个实战项目:在一台新安装的 Linux 虚拟机中,部署 Nginx Web 服务器,并通过浏览器访问到欢迎页面。
这个案例涵盖了软件安装、服务管理、防火墙设置、排错定位等多项运维核心技能。
4.1 更新系统软件源
在安装任何软件前,建议先把系统软件源更新到最新状态。
以 Rocky Linux 9 为例:
dnf update -y以 Ubuntu Server 为例:
apt update && apt upgrade -y这里要解释一下:dnf和apt分别对应红帽系和 Debian 系的包管理器。企业中使用哪套命令,取决于服务器装的是什么发行版,没有统一标准。如果你不确定自己的系统是哪套,可以用以下命令查看:
cat /etc/os-release4.2 安装 Nginx
Rocky Linux 上执行:
dnf install -y nginxUbuntu 上执行:
apt install -y nginx安装完成后,先启动并设置开机自启:
systemctl start nginx systemctl enable nginx systemctl status nginx4.3 配置防火墙
这一步是新手最容易忽略的。很多人安装完 Nginx,发现浏览器访问不了,第一反应是 Nginx 装错了,其实九成是防火墙没放行端口。
如果你的系统开启了 firewalld(Rocky、CentOS 默认开启),执行:
firewall-cmd --permanent --add-service=http firewall-cmd --reload如果你的系统是 ufw(Ubuntu 默认),则执行:
ufw allow 80/tcp ufw status4.4 修改默认首页
默认首页位置与发行版有关。Rocky Linux 中,Nginx 默认站点根目录通常是/usr/share/nginx/html,配置文件在/etc/nginx/nginx.conf。我们可以创建一个自己的首页文件:
echo "<h1>Hello Linux</h1>" > /usr/share/nginx/html/index.html在 Ubuntu 中,默认站点根目录通常是/var/www/html,方法相同。
4.5 浏览器访问验证
在浏览器中输入虚拟机的 IP 地址:
http://192.168.x.x如果能看到Hello Linux的页面,恭喜你,你的第一台 Linux Web 服务器已经成功上线了。整个过程涉及软件安装、服务管理、网络安全策略、文件修改四个环节,任何一个环节理解不到位,都无法得到最终的访问结果。
4.6 如果访问不到,按这个顺序排查
- 先确认 Nginx 进程在运行:
systemctl status nginx。 - 确认本机可以访问:
curl http://localhost。 - 确认虚拟机 IP 地址正确:
ip addr。 - 确认防火墙端口已放行:
firewall-cmd --list-all。 - 确认浏览器访问的是 http 而不是 https。
5. 常见问题与排查思路
从学习后台的反馈和社区问答来看,以下问题出现的频率最高。这里统一列一个排查手册,大家可以收藏备用。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 虚拟机启动提示“客户机操作系统已禁用 CPU” | VMware 虚拟化设置不匹配,或开启了嵌套虚拟化支持但 CPU 不支持 | 在虚拟机设置中勾选“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”,或关闭硬件虚拟化;同时确认 BIOS 中虚拟化功能已开启 |
| SSH 连接超时或拒绝连接 | SSH 服务未启动、端口被防火墙拦截、IP 地址错误 | 执行systemctl status sshd确认服务状态;ss -tlnp查看端口监听;ping检测网络连通性 |
执行命令提示command not found | 软件未安装或用户 PATH 环境变量缺失 | 先which 命令名查看是否安装;未安装则用包管理器安装;PATH 问题可检查/etc/profile |
| 中文显示为乱码 | 系统未安装中文字体或未配置 locale 语言环境 | 安装中文字体包,执行localectl set-locale LANG=zh_CN.UTF-8后重启 shell |
| 创建用户后无法登录桌面 | 用户未加入图形化登录组或系统未安装桌面环境 | 使用journalctl查看登录日志定位原因,检查用户是否在有效组中 |
| 磁盘空间不足,服务突然异常 | 日志文件增长过快或残留安装包过多 | 执行df -h确认分区占用,结合du -sh /*定位大文件,然后清理日志或用 logrotate 做日志轮转 |
| 端口被占用 | 上一次服务未完全退出,或有冲突进程监听同一端口 | 执行 `ss -tlnp |
下面单独展开一个典型问题:“客户机操作系统已禁用 CPU。请关闭或重置虚拟机”。这个报错在 VMware 中很常见,尤其是使用新版本 VMware 或创建需要硬件辅助虚拟化的虚拟机时。
原因分为两类:
- 虚拟机配置中勾选了“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”,但宿主机 CPU 不支持硬件辅助虚拟化。
- 宿主机 BIOS/UEFI 中虚拟化技术(VT-x/AMD-V)未开启。
排查时先进入宿主机 BIOS 设置界面,找到Intel Virtualization Technology或SVM Mode(AMD),将其设置为 Enabled。保存退出后,再进入虚拟机的处理器设置中,确认虚拟化引擎选项是否勾选,取消或重新勾选后重启虚拟机即可。
如果是在某些弱化版 CPU 或旧电脑上安装,勾选虚拟化特性反而会导致虚拟机无法启动,取消勾选即可。
6. 运维最佳实践:从会用命令到工程化思维
很多人在学习 Linux 时容易陷入“背命令”的误区。实际上,命令只是工具,真正的运维能力体现在工程化思维和风险控制意识上。这里分享几点我在实际项目中反复验证的经验。
6.1 能自动化就不要手工人肉操作
维护几十台甚至上百台服务器时,如果你还在每台机器上用cd和vi去改配置,效率低且容易出错。正确的做法是引入自动化工具:
- 脚本层面:编写 Shell 脚本来处理重复的检查和备份任务。
- 批量管理:使用 Ansible 等工具实现批量配置、批量分发、批量执行命令。
- 容器化:使用 Docker 将应用与依赖一起打包,保证开发、测试、生产环境一致。
即使做不到一步到位,日常工作中也应该有“把重复操作沉淀为脚本”的意识。这是初级运维和高级运维的一个重要分水岭。
6.2 权限最小化原则
永远不要给用户超出工作范围所需的权限。服务器上的 root 密码应该由管理层保管,普通运维人员通过 sudo 白名单提权执行特定命令。部署应用的账号也不应该拥有/etc目录的写权限。
定时清理长期不用的账号和登录密钥。如果一个员工已经离职,第一时间禁用他的 SSH 密钥和系统账号,这是最基本的账号安全规范。
6.3 日志记录与可观测性
生产服务器上的每条操作都应当有迹可循。/var/log/messages、/var/log/secure、应用日志等文件是定位问题的第一手资料。建议做到两点:
- 重要操作通过
history追加上时间戳,或者使用堡垒机统一登录入口,完整记录命令过程。 - 建立集中日志平台(如 ELK、Loki),将分散在几十台机器上的日志统一归集,方便告警和检索。
6.4 备份永远要有,而且备份必须演练
任何服务器操作之前,先想清楚一件最坏的事:如果这步操作失败了,我能不能恢复?
- 修改系统配置文件前,先复制一份备份:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak。 - 在生产环境执行删除、清空、更新操作前,确认备份可用。
- 定期备份数据库,并且至少半年做一次恢复演练。没有经过恢复验证的备份,本质上等于没有备份。
6.5 常用文本处理技能要过硬
运维工作中大量时间花在处理日志和分析文本上。grep、awk、sed这三件套必须练熟。比如:
# 统计 Nginx 访问日志中每个 IP 的访问次数 awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10 # 查看最近 5 分钟内新增的错误日志 grep "$(date -d '5 minutes ago' '+%d/%b/%Y:%H:%M')" error.log这类命令没法靠背,只能靠真实场景多练。遇到问题多想一想:能否用一条命令完成?能否在一个管道里解决?
6.6 操作前确认环境,操作后检查结果
生产环境执行命令前,先执行hostname和pwd确认自己在哪台机器、哪个目录。批量执行脚本之前,先用echo打印关键变量。操作后,再通过systemctl status、tail -f等方式确认服务状态和日志输出。
这些习惯看起来琐碎,但正是这些习惯避免了绝大多数生产事故。
7. 学习路线总结与下一步方向
这篇文章从“Linux 是什么”讲到“部署一台真实 Web 服务器”,再到“运维最佳实践”,覆盖了 Linux 入门入行运维的核心链路。最后,针对不同阶段的读者,我再给一份可执行的学习路线图。
7.1 第 1 阶段:基础入门(1-2 周)
- 安装一台虚拟机,熟悉 Linux 文件系统结构。
- 每天练习 20 个高频命令,直到不看笔记也能熟练使用。
- 理解用户、组、文件权限的概念并能独立创建用户、配置权限。
7.2 第 2 阶段:服务管理(2-4 周)
- 熟练使用 systemctl 管理服务。
- 独立完成 Nginx、MySQL、Redis 的安装、配置与启动。
- 掌握防火墙策略配置,理解端口与服务的对应关系。
7.3 第 3 阶段:Shell 编程与自动化(1-2 个月)
- 学习 Shell 语法基础:变量、条件判断、循环、函数。
- 尝试写一个自动备份脚本、日志清理脚本、服务告警脚本。
- 将日常工作脚本沉淀到自己的工具箱中。
7.4 第 4 阶段:进阶方向(3 个月以上)
- 容器化:学习 Docker 镜像、容器、数据卷、网络模型。
- 网络基础:掌握 TCP/IP 原理、DNS 原理、负载均衡与反向代理。
- 安全加固:学习 Linux 系统安全基线、口令策略、入侵检测基础。
写在最后
Linux 这门技能最重要的特点就是:实践性极强。你可以看十本书,但如果不亲自拆装一个系统、不亲手部署一次服务,很难形成真正的肌肉记忆和排查直觉。
我建议你从今天开始,在虚拟机里把这篇教程中的每一个命令都敲一遍。遇到不理解的,先执行,再观察输出,最后查资料弄明白为什么。踩过的坑,才是真正属于你的经验。
如果这篇文章对你有帮助,可以收藏备用,也欢迎在评论区分享你在 Linux 学习中遇到的最难忘的报错。下一篇我们重点聊 Shell 脚本自动化实战,咱们下期见。