1. 先搞清楚“一周吃透”到底要解决什么问题
看到“一周吃透运维核心技能”这种标题,很多人的第一反应是怀疑:运维这么庞杂的领域,怎么可能一周就吃透?这恰恰是我们要先拆解清楚的地方。这个主题的核心,不是让你在一周内成为十年经验的架构师,而是用一周时间,建立起一个从零到能动手部署企业级应用的、可验证的实战技能闭环。
它的目标读者非常明确:零基础或刚入门、想快速切入云计算运维岗位的求职者,以及需要快速上手应用部署的开发者。对于这部分人来说,最大的障碍不是理论深度,而是不知道从哪开始动手,以及如何将分散的知识点(Linux命令、网络、Docker、监控等)串联成一个完整的、能写在简历上的项目。
所以,这个“一周吃透”的路径,本质是一条高度压缩的、以结果为导向的实战学习路径。它不追求面面俱到,而是聚焦于几个最核心、面试和工作中最高频的环节:Linux基础操作、服务部署(尤其是容器化部署)、基础网络与监控。价值在于,你按照这个路径走完,能亲手完成一个像样的、可演示的部署项目,从而建立信心,并拥有继续深入学习的“抓手”。
2. 实战环境准备:你的“实验室”该怎么搭
在动手之前,环境是第一个门槛。我建议所有新手都从虚拟机开始,这是成本最低、最安全的“实验室”。不要一上来就折腾云服务器或公司生产环境。
2.1 操作系统选择与安装
对于学习而言,CentOS 7/8 Stream 或 Ubuntu 20.04/22.04 LTS 是最稳妥的选择。它们资料丰富,与大多数企业环境兼容。
- 虚拟机软件:在Windows或macOS上,安装VirtualBox或VMware Workstation Player(个人免费)。这是第一步,不要纠结。
- 系统镜像:去阿里云、清华大学的开源镜像站下载系统ISO文件。例如,下载
CentOS-7-x86_64-DVD-2009.iso或ubuntu-22.04.3-live-server-amd64.iso。 - 创建虚拟机:
- 内存至少分配2GB(4GB更佳)。
- 硬盘至少20GB,选择“动态分配”以节省物理空间。
- 网络连接选择“桥接模式”或“NAT模式”。桥接模式会让虚拟机获得一个和你宿主机同网段的独立IP,更像一台真实服务器;NAT模式更方便上网。初期可以用NAT。
- 安装过程:对于CentOS,在软件选择时,勾选“带GUI的服务器”,这样会默认安装一些基础工具,对新手更友好。对于Ubuntu Server,选择最小化安装即可,后续需要什么再装什么。务必记住你设置的root密码和普通用户密码。
安装完成后,第一件事不是急着敲命令,而是配置网络和更新系统。
# 对于CentOS 7,查看IP地址 ip addr show # 对于Ubuntu,查看IP地址 ip a # 更新系统软件包(CentOS) yum update -y # 更新系统软件包(Ubuntu) sudo apt update && sudo apt upgrade -y2.2 必备工具与连接
在宿主机上,你需要一个SSH终端工具来连接虚拟机,这比在虚拟机窗口里操作更高效。
- Windows用户:使用MobaXterm或Xshell(个人免费)。它们功能强大,支持SFTP文件传输。
- macOS/Linux用户:直接使用系统自带的终端,用
ssh命令连接。
连接命令格式:ssh username@虚拟机IP地址。例如:ssh root@192.168.1.100。
3. Linux核心命令:不是背大全,而是用熟高频的
“Linux命令大全”让人望而生畏。实际上,初期掌握30个左右的高频命令,就足以应对80%的日常运维操作。关键不是背,而是在具体场景中用熟。
3.1 文件与目录操作(生存技能)
这是你操作系统的根基。
pwd:显示当前目录。迷路时第一个要敲的命令。ls -la:以列表形式显示所有文件(包括隐藏文件)的详细信息。-l看详情,-a看隐藏文件,几乎永远一起用。cd:切换目录。cd ~回家目录,cd -回上一个目录。mkdir -p /opt/your_app/{data,logs,conf}:创建目录。-p参数可以创建多级目录,花括号{}可以批量创建子目录,这个技巧在准备项目目录时非常高效。rm -rf:强制递归删除。危险命令!使用前务必pwd和ls双重确认所在目录和要删的文件。一个经典悲剧:rm -rf / usr/local(/后面多打了个空格)。cp -r:递归复制目录。mv:移动或重命名文件。find / -name “nginx.conf” 2>/dev/null:在全盘查找文件。2>/dev/null是为了过滤掉大量的权限错误提示,让结果更清晰。
3.2 文件查看与编辑
cat:查看短小文件内容。less或more:分页查看长文件。按空格翻页,按q退出。tail -f /var/log/nginx/access.log:实时追踪日志文件末尾内容。这是排查服务问题的“神器”,-f参数会让输出随着文件增长而刷新。head -n 20 file:查看文件头20行。vim或nano:文本编辑器。新手可以从nano开始,操作直观(Ctrl+O保存,Ctrl+X退出)。vim功能强大但学习曲线陡,先学会i(插入)、Esc(退出插入)、:wq(保存退出)、:q!(不保存强制退出)这四步就能应付编辑。
3.3 系统管理与进程
ps aux | grep nginx:查看进程。ps aux列出所有进程,通过管道|用grep过滤出包含“nginx”的行。这是检查服务是否运行的标准操作。top或htop(需安装):动态查看系统资源(CPU、内存)占用情况。htop更直观。systemctl start/stop/restart/status nginx:服务管理核心命令。systemctl是现代Linux系统(CentOS 7+, Ubuntu 16.04+)管理服务(守护进程)的统一工具。记住status(查状态)、start(启动)、stop(停止)、restart(重启)这四个就够了。journalctl -u nginx -f:查看系统服务的日志。-u指定服务名,-f实时追踪。当服务status显示失败时,用这个命令看详细错误原因。df -h:查看磁盘空间使用情况(-h人类可读格式)。free -h:查看内存使用情况。netstat -tlnp或ss -tlnp:查看系统监听了哪些端口及对应进程。这是检查端口冲突、确认服务是否成功监听的关键。
3.4 权限与包管理
chmod和chown:修改文件权限和所有者。常见用法chmod 755 script.sh(给脚本执行权限),chown -R nginx:nginx /data/www(递归修改目录所有者)。- 包管理工具:这是安装软件的方式。
- CentOS/RHEL:
yum install -y docker-ce或dnf install -y docker-ce。 - Ubuntu/Debian:
sudo apt install -y docker.io。 - 关键参数
-y代表自动确认,避免安装过程中需要手动输入y。
- CentOS/RHEL:
注意:不要试图一次性记住所有命令。最好的方法是,为接下来的“部署企业级应用”这个目标服务。比如,在安装Docker时,你会自然用到
curl、yum/apt;在配置服务时,你会用到vim、systemctl;在排查问题时,你会用到journalctl、tail -f。在实战中学习,记忆最牢固。
4. 核心实战:从零部署一个“企业级”应用
我们选择一个经典组合作为实战项目:通过Docker部署Nginx Web服务,并集成Prometheus监控。这个项目虽小,但涵盖了现代运维的核心要素:容器化、服务暴露、监控。
4.1 第一步:安装与配置Docker
Docker是容器化部署的事实标准,必须掌握。
卸载旧版本(如果有):
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 或 Ubuntu sudo apt-get remove docker docker-engine docker.io containerd runc安装依赖与添加仓库:
# CentOS sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # Ubuntu sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"安装Docker引擎:
# CentOS sudo yum install -y docker-ce docker-ce-cli containerd.io # Ubuntu sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io启动并设置开机自启:
sudo systemctl start docker sudo systemctl enable docker验证安装:运行
sudo docker run hello-world。如果能看到欢迎信息,说明Docker安装成功并能从网络拉取镜像。(可选但重要)将当前用户加入docker组,避免每次都要
sudo:sudo usermod -aG docker $USER # 然后需要退出当前终端,重新登录才能生效
4.2 第二步:使用Docker运行Nginx
现在,我们不用编译安装,一行命令启动一个Web服务器。
拉取并运行Nginx镜像:
docker run -d --name my-nginx -p 8080:80 nginx:latest-d:后台运行。--name my-nginx:给容器起个名字,方便管理。-p 8080:80:端口映射。将宿主机的8080端口映射到容器的80端口(Nginx默认端口)。nginx:latest:使用的镜像名和标签。
验证服务:
- 在虚拟机内执行:
curl http://localhost:8080。 - 或者在宿主机浏览器访问:
http://<虚拟机IP>:8080。 - 你应该能看到Nginx的欢迎页面。
- 在虚拟机内执行:
查看容器状态与日志:
docker ps # 查看运行中的容器 docker logs my-nginx # 查看这个容器的日志 docker exec -it my-nginx bash # 进入容器内部(调试用)
4.3 第三步:部署一个自定义应用(以静态网站为例)
单纯跑Nginx没意思,我们要部署自己的内容。
在宿主机准备网页文件:
mkdir -p ~/my-website echo "<h1>Hello, Cloud Ops! This is my first deployed app.</h1>" > ~/my-website/index.html使用数据卷运行Nginx,挂载自定义页面:
# 先停止并删除旧容器 docker stop my-nginx && docker rm my-nginx # 运行新容器,将宿主机目录挂载到容器内 docker run -d --name my-app -p 8080:80 -v ~/my-website:/usr/share/nginx/html nginx:latest-v ~/my-website:/usr/share/nginx/html:将宿主机的~/my-website目录挂载到容器内的Nginx默认网站根目录。这样,修改宿主机文件,容器内立即生效。
再次访问
http://<虚拟机IP>:8080,页面内容应该变成了你自定义的Hello, Cloud Ops!。
4.4 第四步:引入监控 - 部署Prometheus
一个没有监控的应用,就像在黑夜里开车。Prometheus是最流行的开源监控系统。
创建Prometheus配置文件
prometheus.yml:mkdir -p ~/prometheus cat > ~/prometheus/prometheus.yml <<EOF global: scrape_interval: 15s # 每15秒抓取一次数据 scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] # 监控Prometheus自己 - job_name: 'nginx-exporter' static_configs: - targets: ['nginx-exporter:9113'] # 我们将要部署的Nginx指标暴露器 EOF运行Prometheus容器:
docker run -d --name prometheus -p 9090:9090 \ -v ~/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus:latest- 访问
http://<虚拟机IP>:9090,进入Prometheus的Web UI。
- 访问
为Nginx添加指标暴露器(nginx-exporter): Nginx本身不暴露Prometheus格式的指标,需要一个“导出器”。
docker run -d --name nginx-exporter -p 9113:9113 \ --link my-app:nginx-host \ nginx/nginx-prometheus-exporter:latest \ -nginx.scrape-uri http://nginx-host:80/stub_status- 这里使用了
--link将my-app容器(我们之前运行的Nginx)以别名nginx-host连接到nginx-exporter容器,这样导出器才能访问到Nginx的状态接口。 - 注意:默认Nginx镜像没有启用
stub_status模块,所以上面的导出器会报错。这引出了一个关键点:企业级部署需要自定义镜像或配置。为了简化,我们先理解流程。在生产中,你需要构建一个包含stub_status配置的Nginx镜像。
- 这里使用了
更新Prometheus配置并重载: 修改
~/prometheus/prometheus.yml,确保nginx-exporter的targets正确。然后让Prometheus重载配置:docker kill -s HUP prometheus在Prometheus UI的“Status -> Targets”页面,应该能看到
nginx-exporter和prometheus两个job都是“UP”状态。
至此,你完成了一个微缩版但结构完整的“企业级应用”部署:应用(Nginx)容器化运行、通过端口对外提供服务、配置了独立的监控系统进行指标采集。这个架子,和部署一个复杂的微服务应用在本质上是一样的。
5. 技能串联与问题排查:把点连成线
单独会几个命令和工具没用,运维的核心价值在于串联和排错。基于上面的实战,我们梳理几个典型场景。
5.1 场景一:服务访问不了
这是最常见的问题。按照以下顺序排查,能解决90%的连通性问题。
检查服务进程是否存活:
docker ps | grep my-app # 或者 systemctl status docker # 确保Docker本身是运行的如果容器没运行,用
docker logs my-app看启动日志。检查端口是否监听:
ss -tlnp | grep 8080 # 或 netstat -tlnp | grep 8080查看宿主机8080端口是否被Docker进程监听。
检查防火墙:
# CentOS 7 firewall-cmd --list-ports firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --reload # Ubuntu (如果使用ufw) sudo ufw status sudo ufw allow 8080/tcp从宿主机内部测试:
curl http://localhost:8080如果宿主机能通,但外部不通,问题大概率在防火墙或网络策略(如云服务器的安全组)。
5.2 场景二:磁盘空间不足告警
使用df -h发现/或/var分区使用率超过90%。
定位大文件或目录:
du -sh /var/* | sort -rh | head -10查看
/var目录下哪个子目录最大。如果是Docker占用过多: Docker的镜像、容器、日志默认在
/var/lib/docker。docker system df # 查看Docker磁盘使用概况 docker image prune -a # 删除所有未被容器使用的镜像(谨慎!) docker container prune # 删除所有停止的容器 docker volume prune # 删除未被使用的数据卷清理日志文件:
# 查看大日志文件 find /var/log -type f -name “*.log” -size +100M # 可以清空(非删除)日志文件,例如 > /var/log/somelarge.log # 更好的方式是配置日志轮转(logrotate)
5.3 场景三:应用响应慢
使用top或htop发现CPU或内存占用高。
- 定位进程:在
top界面按P(按CPU排序)或M(按内存排序),找到占用资源最高的进程PID。 - 分析进程:
如果是一个Java应用,可能是内存泄漏;如果是Web服务器,可能是遭遇攻击或配置不当。ps aux | grep <PID> # 查看进程详情 docker stats # 查看所有容器的实时资源占用 - 查看应用日志:
在日志中搜索docker logs --tail 100 -f my-apperror、timeout、slow等关键词。 - 网络分析:
连接数异常高可能是CC攻击的迹象。ss -s # 查看网络连接统计 netstat -an | grep :8080 | wc -l # 查看8080端口的连接数
6. 从实战到就业:还需要补充什么
通过一周的高强度实战,你掌握了Linux基础、Docker部署和简单监控。但要达到“就业”水平,还需要在以下方向有意识地深化和拓展:
6.1 版本管理与配置自动化
手动敲命令部署,只适用于学习和测试。企业环境需要自动化。
- Shell脚本:把部署步骤写成脚本(
.sh文件)。例如,一个脚本包含:更新系统、安装Docker、拉取镜像、运行容器。这是最基础的自动化。 - Ansible:这是运维必须掌握的配置管理工具。它通过SSH批量管理服务器,用YAML文件描述部署状态(“声明式”)。学习编写
playbook来部署Nginx、配置防火墙、管理用户。 - Git:将你的脚本、Ansible Playbook、配置文件存入Git仓库(如GitLab、Gitee)。这是团队协作和版本回溯的基础。
6.2 容器编排与云原生
单机Docker只是起点,企业应用多是集群部署。
- Docker Compose:用于定义和运行多容器应用。用一个
docker-compose.yml文件定义Nginx、Prometheus、Grafana(可视化)等服务,实现一键启动。这是学习编排的第一步。 - Kubernetes (K8s):容器编排的事实标准。学习成本高,但至关重要。可以从 Minikube 或 Kind 在本地搭建一个单节点集群开始,理解 Pod、Deployment、Service、Ingress 这些核心概念。“会部署应用到K8s”是当前运维岗位的强有力加分项。
6.3 监控、日志与告警体系
我们只部署了Prometheus采集指标,一个完整的可观测性体系还包括:
- Grafana:将Prometheus的数据变成直观的仪表盘。用Docker运行Grafana,并添加Prometheus作为数据源。
- 日志收集:应用日志不能只靠
docker logs查看。学习ELK Stack(Elasticsearch, Logstash, Kibana) 或Loki,将容器日志集中收集、索引和展示。 - 告警:配置Prometheus Alertmanager,当指标异常(如服务器宕机、请求错误率飙升)时,能通过邮件、钉钉、企业微信等渠道发出告警。
6.4 网络与安全基础
- 网络:理解Docker的网络模式(bridge, host, none),理解K8s的Service和Ingress如何对外暴露服务。了解基本的TCP/IP、DNS、HTTP/HTTPS。
- 安全:不仅仅是防火墙。包括:服务器最小化安装、定期更新补丁、使用非root用户运行服务、配置SSH密钥登录禁用密码、Docker镜像安全扫描、配置TLS证书启用HTTPS。
这一周的高强度学习,目的是为你打开一扇门,并给你一张清晰的路线图。真正的“吃透”在于后续持续的、有目标的练习。最好的方法就是用这套流程,去部署一个更复杂的开源项目,比如一个博客系统(WordPress)、一个CI/CD工具(Jenkins)或者一个简单的微服务demo。在过程中,你会遇到各种问题,而解决这些问题的过程,就是你技能飞速提升的时候。