1. Linux基础入门:从零开始掌握运维核心技能
作为现代IT基础设施的基石,Linux系统在服务器领域的市场占有率超过90%。我至今记得第一次在终端输入ls命令看到目录列表时的兴奋感——那是我运维生涯的起点。本文将系统梳理Linux运维工程师必须掌握的核心知识体系,这些内容来自我十年运维工作中反复验证的最佳实践。
提示:本文所有命令均在CentOS 7/8和Ubuntu 20.04 LTS环境下验证通过,其他发行版可能需要微调语法
1.1 Linux文件系统深度解析
Linux文件系统采用树状结构,但与Windows有着本质区别。理解/目录下的每个文件夹用途是运维的基本功:
/bin和/sbin:存放核心二进制文件(后者需要root权限)/etc:系统配置文件的大本营,nginx、ssh等服务的配置都在这里/var/log:系统日志的聚集地,排查故障的第一现场/home:用户目录,建议与根分区分离以防止磁盘爆满影响系统运行
我曾遇到过/var分区未单独划分导致日志写满整个磁盘的案例。现在我的标准分区方案是:
bash复制/ 50GB
/boot 1GB
/var 100GB
/home 剩余空间
swap 内存大小的1.5倍(当内存>8GB时可不设)
1.2 必须掌握的20个核心命令
这些命令构成了我的日常工具箱(按使用频率排序):
-
诊断类:
bash复制# 查看实时进程 top -c -u username # 网络连接分析 ss -tulnp | grep nginx # 磁盘空间监控 df -Th --exclude-type=tmpfs -
文件操作:
bash复制# 递归查找并删除7天前的日志 find /var/log -name "*.log" -mtime +7 -exec rm -f {} \; # 实时查看日志增长 tail -f /var/log/nginx/access.log -
权限管理:
bash复制# 递归修改目录权限 chmod -R 750 /opt/app # 修改属主同时保留原有权限 chown --reference=reference_file target_file
特别注意:
rm -rf /是著名的"删库跑路"命令,建议通过alias设置为提示确认:bash复制echo "alias rm='rm -i'" >> ~/.bashrc
2. SSH安全加固实战指南
SSH是运维人员的生命线,但也是黑客的主要攻击目标。去年我们数据中心遭遇了每秒3000次的暴力破解尝试,通过以下措施成功防御:
2.1 基础安全配置
修改/etc/ssh/sshd_config关键参数:
bash复制Port 58222 # 改为非标准端口
PermitRootLogin no # 禁止root直接登录
MaxAuthTries 3 # 最大尝试次数
ClientAliveInterval 300 # 5分钟无操作断开
AllowUsers devops admin # 白名单用户
重启服务后立即测试新端口连接:
bash复制systemctl restart sshd
# 新开终端测试
ssh -p 58222 user@server
2.2 密钥认证最佳实践
密码认证即便再复杂也不如密钥安全。生成密钥的正确姿势:
bash复制ssh-keygen -t ed25519 -C "work_key" -f ~/.ssh/work_rsa
# 将公钥上传到服务器
ssh-copy-id -i ~/.ssh/work_rsa.pub -p 58222 user@server
密钥管理建议:
- 不同环境使用不同密钥(生产/测试/个人)
- 密钥必须设置passphrase
- 定期轮换密钥(建议每6个月)
3. Docker运维精要
容器化技术彻底改变了我的运维方式。以下是生产环境Docker的黄金法则:
3.1 容器生命周期管理
bash复制# 运行MySQL容器(带资源限制)
docker run -d --name mysql57 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=ComplexPwd123! \
--memory="2g" --cpus="1.5" \
-v /data/mysql:/var/lib/mysql \
mysql:5.7 --character-set-server=utf8mb4
# 查看容器资源占用
docker stats --no-stream
3.2 镜像构建优化
高效的Dockerfile示例:
dockerfile复制FROM python:3.9-slim as builder
# 阶段1:构建依赖
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# 阶段2:最终镜像
FROM python:3.9-slim
COPY --from=builder /root/.local /root/.local
COPY . /app
WORKDIR /app
ENV PATH=/root/.local/bin:$PATH
CMD ["gunicorn", "-b :8000", "app:app"]
构建技巧:
- 使用多阶段构建减小镜像体积
- 合理利用层缓存(变动少的指令放前面)
- 永远不要在生产环境使用
latest标签
4. Nginx性能调优实战
我们的电商网站在大促期间通过以下配置承受住了10万QPS的冲击:
4.1 关键配置参数
nginx复制worker_processes auto; # 与CPU核心数一致
worker_rlimit_nofile 100000; # 每个worker能打开的文件描述符数
events {
worker_connections 4096;
use epoll; # Linux高性能模式
multi_accept on; # 同时接受多个连接
}
http {
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
# 静态文件缓存
server {
location ~* \.(jpg|css|js)$ {
expires 30d;
access_log off;
}
}
}
4.2 压力测试方法
使用wrk进行基准测试:
bash复制wrk -t4 -c1000 -d60s --latency http://example.com
参数说明:
-t线程数(建议与CPU核心数相同)-c并发连接数-d测试持续时间
5. 运维工程师的日常工具箱
这些工具让我每天至少节省2小时:
| 工具类别 | 推荐工具 | 典型使用场景 |
|---|---|---|
| 监控告警 | Prometheus + Grafana | 指标收集与可视化 |
| 日志分析 | ELK Stack | 分布式日志收集与分析 |
| 配置管理 | Ansible | 批量服务器配置部署 |
| 终端复用 | tmux | 持久化会话管理(断网不中断) |
| 网络诊断 | tcpdump + Wireshark | 抓包分析网络问题 |
个人最爱的组合键:
bash复制# tmux分屏操作
Ctrl+b % # 垂直分屏
Ctrl+b " # 水平分屏
Ctrl+b 方向键 # 切换窗格
# 快速跳转常用目录
cd ~/projects && cd $(ls -1dt */ | head -1)
6. 故障排查思维框架
当凌晨3点收到告警时,这套方法论帮我快速定位问题:
-
现象确认:
- 服务不可用?性能下降?数据异常?
- 影响范围是单节点还是集群?
-
信息收集:
bash复制# 查看系统负载 uptime; vmstat 1 5 # 检查磁盘空间 df -h; du -sh /* # 分析内存使用 free -h; ps aux --sort=-%mem | head -
根因分析:
- 最近变更(部署/配置/数据)
- 资源瓶颈(CPU/内存/IO/网络)
- 依赖服务状态
-
解决方案:
- 临时规避(重启/扩容/降级)
- 永久修复(代码/配置/架构优化)
记得去年处理过一个经典案例:某Java应用频繁OOM,最终发现是因为Docker容器未配置内存限制,导致JVM默认使用宿主机内存计算堆大小。解决方案是在启动容器时明确设置-m 4g参数。