Linux运维从入门到实战:核心命令、权限管理、Shell脚本与排障思路
在云计算的招聘要求里Linux 几乎是一道必答题。无论是运维、SRE、DevOps还是后端开发最终都要和 Linux 服务器打交道。很多初学者入门时最大的困惑不是“Linux 命令太多记不住”而是不知道这些命令该用在什么场景、怎么串成一套完整的运维能力。本文整理了一条适合从零开始的 Linux 学习主线覆盖环境搭建、文件管理、用户权限、进程监控、网络排查、服务管理和 Shell 自动化等重要模块。文章适合准备转行云计算运维的初学者、在校学生也适合需要补强服务器操作基础的后端研发。读完你会明白Linux 运维并不是背命令而是一套“看现象、查日志、定位根因、解决问题”的工程方法。1. 背景为什么 Linux 运维能力这么重要1.1 服务器领域的事实标准如今的互联网业务绝大多数线上服务都运行在 Linux 服务器上。云计算平台提供的云主机主流镜像也基本都是 CentOS、Ubuntu、Rocky Linux、openEuler 等 Linux 发行版。即使个人电脑习惯了 Windows 桌面到了服务器领域Linux 依然是绕不开的存在。原因可以归纳为几点开源免费生态成熟社区资料丰富。稳定性高适合长时间运行的线上服务。命令行操作效率高便于批量管理和远程维护。容器、虚拟化、云原生等技术的底层基础都构建在 Linux 之上。对“云计算运维”这个方向来说Linux 功底直接决定了你能处理多复杂的线上问题。很多高级的自动化、监控、容器化技能都必须建立在扎实的 Linux 基础之上。1.2 运维不是“会敲命令”就够了简单来说运维工作大致分为五个层次层次主要内容基础操作层文件管理、用户权限、进程查看、网络配置服务管理层安装配置 Nginx、MySQL、Redis 等软件用 systemd 管理服务自动化层Shell 脚本、Ansible、定时任务监控与排障层日志分析、性能排查、故障恢复云平台层云主机、负载均衡、对象存储、容器服务不少入门教程只教命令、不讲场景学完之后遇到真实问题依然无从下手。本文会更强调“带着场景学命令”让每个命令都能在线上排障、部署、巡检时真正用得上。2. 环境准备搭好你的第一个 Linux 训练场2.1 三种常见的学习环境方案在开始敲命令之前先要有一个 Linux 环境。根据设备情况选一种即可虚拟机方案使用 VMware Workstation 或 VirtualBox 安装 Linux 镜像适合完整模拟服务器环境可以放心折腾系统配置。云服务器方案购买或申请一台云主机能接触真实公网环境更适合练习网络与安全配置。WSL 方案Windows 自带的 WSL 可以直接运行 Ubuntu启动快、占用资源少适合命令入门。对于零基础学习者我更推荐虚拟机或云服务器。虚拟机里可以随意破坏和恢复快照云服务器则能提前感受生产环境的管理方式。2.2 发行版怎么选Linux 发行版很多运维学习阶段建议从两大体系中选择RHEL 系CentOS Stream、Rocky Linux、AlmaLinux。企业中使用广泛文档和故障案例多。Debian 系Ubuntu Server、Debian。云镜像丰富社区活跃资料齐全。另外麒麟、统信 UOS 等国产操作系统在政务和信创场景中应用越来越多很多操作逻辑与 RHEL 系接近学会 RHEL 系后再接触会很快上手。需要注意不同体系的软件包管理命令不同。RHEL 系使用 yum/dnfDebian 系使用 apt。本文示例以 RHEL 系为主遇到 apt 命令时会单独提示。2.3 登录系统并确认版本安装完成后使用 root 用户或普通用户登录。登录后先执行几个基础命令确认当前环境# 查看系统版本信息 cat /etc/os-release # 查看内核版本 uname -a # 查看主机名 hostnamecat /etc/os-release能显示当前系统的发行版名称和版本号。后面安装软件、排查依赖问题时这些信息非常有用。3. Linux 核心概念与基础命令拆解3.1 文件系统与路径Linux 的文件系统是一棵以/为根的树。常用目录及其作用如下目录作用/etc系统和服务配置文件目录/var日志、缓存等变化数据/home普通用户的家目录/rootroot 用户的家目录/tmp临时文件目录/usr/local手动编译安装软件的位置路径分为绝对路径和相对路径绝对路径从/开始写例如/etc/nginx/nginx.conf。相对路径以当前目录为基准例如cd ..返回上一级目录。在配置文件中写路径时尽量使用绝对路径可以降低脚本出错概率。3.2 文件与目录操作命令创建目录、切换目录、查看目录内容是最基础的操作# 创建目录-p 表示父目录不存在时自动创建 mkdir -p /data/logs # 切换目录 cd /data/logs # 查看当前目录 pwd # 查看目录内容包括隐藏文件 ls -la-p参数在写部署脚本时非常实用。比如初始化多级目录不需要先手动创建上级目录一条命令就能完成。复制、移动和删除# 复制文件 cp /etc/hosts /data/hosts.bak # 移动或重命名 mv /data/hosts.bak /data/hosts # 删除文件 rm /data/hosts # 删除目录递归强制删除谨慎使用 rm -rf /data/logs这里必须提醒rm -rf是高风险命令尤其以 root 身份操作时一旦路径写错代价往往非常大。生产环境执行删除前建议先ls确认路径再执行删除。3.3 查看文件内容排障第一动作线上出现问题第一件事通常是看日志。常见查看命令如下# 查看整个文件 cat /etc/hosts # 分页查看适合长文件 less /var/log/messages # 查看文件末尾 30 行 tail -n 30 /var/log/messages # 持续跟踪文件新增内容 tail -f /var/log/messages # 查看文件开头 20 行 head -n 20 /var/log/messagestail -f是排障利器。调试 Nginx 或应用日志时先开着tail -f再触发一次请求新日志会实时出现在终端非常直观。3.4 文本处理三剑客grep、awk、sed运维工作中大量时间花在处理日志文本上。三剑客的分工很明确grep用于筛选匹配的行# 在文件中查找包含 error 的行 grep error /var/log/messages # 忽略大小写并显示行号 grep -in error /var/log/messagesawk用于按列处理文本默认按空格或制表符分列# 查看 Nginx 访问日志的第一列通常是客户端 IP awk {print $1} /var/log/nginx/access.logsed用于替换、删除等文本编辑操作# 把 nginx.conf 中的 old 替换为 new只输出不修改原文件 sed s/old/new/g /etc/nginx/nginx.conf这三个命令组合使用可以完成很多监控脚本和日志分析脚本的业务逻辑。建议花时间多练习。很多初学者担心“命令背不过来”其实没必要死记。把高频命令练熟遇到不记得的参数用man或--help现场查询即可# 查看命令手册 man ls # 查看命令帮助摘要 ls --help4. 用户、权限与进程管理实战4.1 用户与组管理生产环境建议用普通用户执行日常工作避免所有人都直接使用 root。创建用户和设置密码# 创建用户 useradd zhangsan # 设置密码 passwd zhangsan # 将用户加入 wheel 组RHEL 系中该组默认具有 sudo 权限 usermod -aG wheel zhangsan # 查看用户信息 id zhangsan删除用户时如果确认需要清理家目录和邮件目录可以加-r参数userdel -r zhangsan不做清理则可以直接userdel zhangsan。实际项目中是否删除家目录要提前确认该目录下是否有需要保留的数据。4.2 文件权限与 sudoLinux 文件权限体系是运维面试中的高频考点。权限分为读r4、写w2、执行x1三种分别作用于文件所有者、所属组、其他用户三类对象。查看权限ls -l /etc/shadow输出类似---------- 1 root root 1280 Jan 20 10:30 /etc/shadow修改权限的两种常见方式# 给文件所有者增加执行权限 chmod ux /data/run.sh # 使用数字方式设置权限755 表示所有者可读写执行组和其他用户可读执行 chmod 755 /data/run.sh # 修改文件所有者和所属组 chown zhangsan:zhangsan /data/run.sh配置 sudo 权限时修改/etc/sudoers必须使用visudo命令。它会在保存前检查语法避免配置错误导致 sudo 失效。visudo权限管理有一个基本原则给用户完成工作所需的最小权限。不要随意把 root 密码发给多人能用 sudo 的临时提权就不要暴露 root 账号。4.3 进程管理与系统监控服务器出现卡顿或负载过高时第一件事是查看系统整体状态。# 查看系统负载 uptime # 查看内存使用 free -h # 查看磁盘使用 df -h # 动态查看进程与资源占用 top在top界面中按P按 CPU 使用率排序按M按内存使用率排序按q退出。查找指定进程并结束# 查找 nginx 相关进程 ps -ef | grep nginx # 强制结束指定进程12345 为进程 PID kill -9 12345kill -9是强杀信号适合进程无响应时使用。正常情况下可以先执行kill 12345给进程一个优雅退出的机会让它可以完成清理工作后再关闭。4.4 系统日志在哪里不同发行版日志位置略有差异。RHEL 系传统日志位于/var/log/messages使用 systemd 的发行版还可以通过 journalctl 查看# 查看最近 50 条系统日志 journalctl -n 50 # 查看某个服务的日志 journalctl -u nginx --no-pager排查问题的顺序应该是先看日志、再定位原因、最后做处理。缺少日志依据的猜测式排障很容易把问题引向错误方向。5. 软件安装与服务管理5.1 软件包管理基础RHEL 系使用dnf或yum管理软件包# 更新软件包缓存 dnf makecache # 安装软件-y 表示自动确认 dnf install -y nginx # 查看已安装软件包的文件列表 rpm -ql nginx # 卸载软件 dnf remove -y nginxDebian 系使用aptapt update apt install -y nginx-y参数用于跳过交互式确认在脚本部署场景下非常关键否则会自动安装可能会卡住等待输入。5.2 systemd 服务管理现代 Linux 发行版几乎全部使用 systemd 管理系统服务。常用命令如下# 启动服务 systemctl start nginx # 设置开机自启 systemctl enable nginx # 查看服务状态 systemctl status nginx # 重启服务 systemctl restart nginx # 重载配置不中断服务 systemctl reload nginx需要理解restart和reload的区别restart会停止服务再重新启动存在短暂中断reload是让服务按新配置平滑重载生产环境优先使用reload。修改 Nginx 或 Nginx 类配置后能 reload 就不要 restart。6. Shell 脚本入门自动化运维的起点6.1 一个完整的磁盘告警脚本当命令越用越熟之后就可以把它们组合成脚本这就是自动化运维的开始。下面实现一个磁盘使用率检测脚本超过阈值写入告警日志。#!/bin/bash # 文件路径/data/scripts/check_disk.sh THRESHOLD80 ALERT_FILE/data/logs/disk_alert.log # 提取根分区使用率数值例如 65% USAGE$(df -h / | awk NR2 {print $5} | sed s/%//g) if [ $USAGE -gt $THRESHOLD ]; then echo $(date %Y-%m-%d %H:%M:%S) WARN: disk usage is ${USAGE}% $ALERT_FILE echo 磁盘使用率告警${USAGE}% else echo 磁盘使用率正常${USAGE}% fi几个关键点说明awk NR2 {print $5}表示取df输出中的第二行去掉表头第五列。sed s/%//g去掉百分号方便与数字阈值比较。告警信息不仅输出到终端还写入日志文件方便事后追溯。添加执行权限并运行mkdir -p /data/scripts /data/logs chmod x /data/scripts/check_disk.sh /data/scripts/check_disk.sh6.2 使用 crontab 定时执行脚本写好后可以交给 crontab 周期执行# 编辑当前用户的定时任务 crontab -e加入如下一行*/5 * * * * /data/scripts/check_disk.sh /data/logs/check_disk.log 21这段配置表示每 5 分钟执行一次脚本并把标准输出和错误输出都追加到check_disk.log。crontab 五个字段含义如下字段含义*/5每 5 分钟*每小时*每天*每月*每周查看当前用户的定时任务crontab -l生产环境中磁盘监控、日志清理、数据备份这类重复性工作都可以通过这些基础命令组合成脚本再用 crontab 自动化执行这也是 Linux 运维最日常的场景之一。7. 常见问题与排查思路7.1 高频问题速查表问题现象常见原因解决思路命令提示 Permission denied当前用户权限不足检查文件权限归属必要时使用 sudo端口被占用服务未停止或端口冲突使用 ss -lntp 查看监听端口确认占用进程磁盘空间不足日志或大文件过多使用 du -sh 定位大目录清理归档日志systemctl start 失败配置语法错误或依赖缺失查看 systemctl status 与 journalctl 日志云主机无法 SSH 连接安全组或防火墙未放行检查云控制台安全组规则和本地防火墙sudo: command not foundPATH 环境变量异常使用全路径执行命令检查 /etc/sudoers7.2 一个端口排查的完整思路假设部署 Nginx 后浏览器访问不到服务可以按以下顺序排查确认服务状态systemctl status nginx确认端口是否监听ss -lntp | grep 80本机自测curl -I http://127.0.0.1检查防火墙放行规则firewall-cmd --list-all如果是云服务器还要去云控制台检查安全组是否放行了 80 端口。绝大多数“服务起不来”或“外部访问不了”的问题通过这几步就能定位到具体环节。排障看日志验证看端口这是运维工作的基本节奏。8. 运维最佳实践与工程建议8.1 账号与权限安全root 密码严格保密远程登录建议使用普通用户加 sudo减少 root 账号暴露面。为每位运维人员创建独立账号禁止多人共用账号方便审计问题来源。给用户分配最小权限能完成工作即可不随意开放 sudo 权限。定期检查登录记录last -n 208.2 日志与监控服务日志统一存放在约定目录便于后续接入日志平台。上线服务前先确认日志功能正常不要等到故障时才发现没有日志可看。磁盘使用率设置阈值告警避免日志增长把磁盘写满。变更前后记录关键指标例如free -h、df -h、uptime便于对比异常。8.3 备份与变更管理修改重要配置文件前先复制备份建议带上日期cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date %F)批量执行命令前先在测试环境验证再发布到生产。线上操作遵循最小变更原则一次只做一个变更方便定位问题。定期使用 rsync 做文件级备份rsync -avz /data/ /backup/data/8.4 学习建议动手加记录学 Linux 没有捷径但可以降低学习门槛每学一个命令用man或--help查一下参数含义。坚持写操作笔记记录命令、场景、报错和解决方法。自己搭建一个完整小项目比如 Nginx 部署加 Shell 脚本监控告警加 crontab 定时备份。遇到问题先用完整报错信息搜索资料但不要跳过自己分析日志的步骤。结合云计算运维方向后续可以继续学习网络基础TCP/IP、DNS、HTTP、常见中间件Nginx、MySQL、Redis、容器化Docker、Kubernetes和自动化工具Ansible、Shell逐步形成完整的技能链。9. 写在最后到这里你已经走过了 Linux 运维入门的主线理解了文件系统与基础命令掌握了用户权限、进程管理、软件安装、服务管理和 Shell 自动化脚本也知道了排查问题时的基本思路。下一步最重要的事情是找一台服务器把本文中的命令亲手敲一遍。读十遍不如练一遍遇到报错不要慌先看日志再对照本文的排查思路一步步缩小范围。如果这篇文章对你有帮助可以收藏备用如果哪里解释得不够清楚欢迎在评论区交流。