Linux系统管理核心知识点详解
Linux系统管理核心知识点详解
目录
常用命令详解
1. grep命令 - 文本搜索利器
基本语法
1 | grep [选项] 模式 [文件] |
常用参数
-i
:忽略大小写-v
:反向匹配-n
:显示行号-r
:递归搜索-E
:使用扩展正则表达式-A
:显示匹配行后N行-B
:显示匹配行前N行
实战技巧
1 | # 搜索包含error的日志行 |
高级正则表达式应用
1 | # 匹配邮箱地址 |
2. find命令 - 文件查找专家
基本语法
1 | find [路径] [表达式] |
常用参数
-name
:按文件名查找-type
:按文件类型查找-mtime
:按修改时间查找-size
:按文件大小查找-perm
:按权限查找-user
:按用户查找
实战技巧
1 | # 查找7天内修改的.log文件 |
复杂查找组合
1 | # 查找最近7天内修改的Java文件 |
3. awk命令 - 文本处理神器
基本语法
1 | awk 'pattern {action}' file |
内置变量
$0
:整行内容$1-$n
:第1-n个字段NF
:字段数量NR
:行号FS
:字段分隔符OFS
:输出字段分隔符
实战技巧
1 | # 打印第1列和第3列 |
高级应用
1 | # 统计每个IP的访问次数 |
4. top命令 - 系统监控工具
界面解读
1 | top - 15:30:45 up 2 days, 3:15, 2 users, load average: 0.12, 0.08, 0.05 |
关键指标解释
- load average:系统负载(1分钟、5分钟、15分钟平均值)
- %Cpu(s):CPU使用率
- us:用户空间占用
- sy:内核空间占用
- id:空闲CPU百分比
- wa:等待I/O的CPU时间
- KiB Mem:内存使用情况
- KiB Swap:交换空间使用情况
交互命令
P
:按CPU使用率排序M
:按内存使用率排序T
:按运行时间排序k
:终止进程r
:修改进程优先级1
:显示每个CPU核心的使用情况
实战技巧
1 | # 显示特定用户的进程 |
系统监控与性能分析
1. CPU性能分析
使用top/htop监控CPU
1 | # 安装htop(更友好的top替代品) |
CPU使用率分析
1 | # 查看CPU详细信息 |
高CPU占用排查步骤
使用top找出高CPU进程
1
top -o %CPU
查看进程详细信息
1
ps -p PID -o pid,ppid,cmd,%mem,%cpu
分析进程线程
1
2top -H -p PID
ps -T -p PID使用strace跟踪系统调用
1
sudo strace -p PID
2. 内存性能分析
内存使用情况
1 | # 查看内存使用情况 |
内存泄漏检测
1 | # 使用valgrind检测内存泄漏 |
内存优化建议
调整swappiness参数
1
2
3
4
5
6
7
8# 查看当前值
cat /proc/sys/vm/swappiness
# 临时修改(重启失效)
sudo sysctl vm.swappiness=10
# 永久修改
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf清理缓存
1
2
3
4
5
6
7
8# 清理页缓存
sudo sync && echo 1 > /proc/sys/vm/drop_caches
# 清理目录项和inode缓存
sudo sync && echo 2 > /proc/sys/vm/drop_caches
# 清理所有缓存
sudo sync && echo 3 > /proc/sys/vm/drop_caches
3. 磁盘I/O性能分析
磁盘使用情况
1 | # 查看磁盘使用情况 |
I/O性能优化
1 | # 查看磁盘调度算法 |
故障排查与诊断
1. 系统日志分析
重要日志文件位置
/var/log/syslog
:系统日志(Ubuntu/Debian)/var/log/messages
:系统日志(CentOS/RHEL)/var/log/auth.log
:认证日志/var/log/kern.log
:内核日志/var/log/dmesg
:系统启动信息
日志分析技巧
1 | # 查看系统错误日志 |
2. OOM(内存溢出)场景分析
OOM Killer机制
当系统内存不足时,Linux的OOM Killer会选择并终止占用内存最多的进程。
OOM排查步骤
检查OOM日志
1
2grep -i "killed process" /var/log/syslog
dmesg | grep -i "oom"分析OOM分数
1
2
3
4
5# 查看进程OOM分数
cat /proc/PID/oom_score
# 查看OOM调整值
cat /proc/PID/oom_score_adj配置OOM保护
1
2# 保护重要进程(-1000表示禁止OOM killer)
echo -1000 > /proc/PID/oom_score_adj
OOM预防策略
- 合理配置JVM堆内存
- 使用内存监控工具
- 配置swap空间
- 优化应用程序内存使用
3. 系统无响应排查
排查步骤
检查系统负载
1
2uptime
cat /proc/loadavg检查进程状态
1
ps aux | grep -E "(D|Z)"
检查I/O等待
1
iostat -x 1 5
检查网络连接
1
netstat -tuln | grep -E "(CLOSE_WAIT|TIME_WAIT)"
服务管理与配置
1. systemctl命令详解
基本服务管理
1 | # 启动服务 |
服务状态监控
1 | # 查看所有运行中的服务 |
2. 服务故障排查
服务启动失败排查
检查服务状态
1
sudo systemctl status service_name
查看详细日志
1
journalctl -u service_name --no-pager -l
检查配置文件
1
2
3
4# 不同服务的配置文件检查
sudo nginx -t # Nginx
sudo apache2ctl -t # Apache
sudo php-fpm -t # PHP-FPM检查端口占用
1
2netstat -tulnp | grep :80
ss -tulnp | grep :80
服务性能监控
1 | # 使用systemd-cgtop监控资源使用 |
网络诊断与优化
1. 网络连接状态分析
netstat命令详解
1 | # 查看所有网络连接 |
ss命令(netstat替代品)
1 | # 查看所有连接 |
网络连接状态解释
- ESTABLISHED:已建立的连接
- LISTEN:监听状态
- TIME_WAIT:连接关闭后等待
- CLOSE_WAIT:等待本地应用关闭
- SYN_SENT/SYN_RECV:TCP握手过程
2. 网络性能优化
网络带宽监控
1 | # 使用iftop监控实时流量 |
TCP性能调优
1 | # 查看当前TCP参数 |
网络故障排查
1 | # 测试网络连通性 |
实战案例分析
案例1:Web服务器高负载排查
问题描述
Web服务器响应缓慢,CPU使用率接近100%。
排查过程
查看系统负载
1
2uptime
top -o %CPU发现异常进程
1
ps aux | grep -E "(apache|nginx)"
分析访问日志
1
2
3
4
5# 统计IP访问次数
awk '{ip[$1]++} END {for(i in ip) print ip[i], i}' access.log | sort -nr | head -10
# 检查是否有异常User-Agent
awk -F'"' '{ua[$6]++} END {for(u in ua) print ua[u], u}' access.log | sort -nr | head -10解决方案
- 配置防火墙限制IP访问频率
- 优化Web服务器配置
- 启用CDN减轻服务器压力
案例2:内存泄漏排查
问题描述
Java应用内存持续增长,最终导致OOM。
排查过程
监控内存使用
1
2top -p JAVA_PID
jstat -gc JAVA_PID 1s生成堆转储
1
jmap -dump:format=b,file=heap.hprof JAVA_PID
使用MAT分析
- 导入heap.hprof文件
- 查找内存泄漏嫌疑对象
- 分析引用链
优化代码
- 修复资源未关闭问题
- 优化缓存策略
- 增加内存监控告警
案例3:网络连接数过多
问题描述
服务器网络连接数达到上限,新连接被拒绝。
排查过程
查看连接状态
1
netstat -an | awk '/^tcp/ {state[$NF]++} END {for(key in state) print key, state[key]}'
发现大量TIME_WAIT
1
netstat -an | grep TIME_WAIT | wc -l
优化内核参数
1
2
3
4
5
6
7
8# 减少TIME_WAIT时间
sudo sysctl -w net.ipv4.tcp_fin_timeout=30
# 启用TIME_WAIT重用
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
# 启用TIME_WAIT快速回收
sudo sysctl -w net.ipv4.tcp_tw_recycle=1
高频面试题
1. grep命令相关
Q1:如何使用grep查找包含”error”但不包含”debug”的行?
1 | grep "error" file.log | grep -v "debug" |
Q2:如何在多个文件中递归查找包含特定字符串的文件?
1 | grep -r "search_string" /path/to/directory |
Q3:如何使用正则表达式匹配邮箱地址?
1 | grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" file.txt |
2. find命令相关
Q1:如何查找7天内修改过的文件?
1 | find /path -type f -mtime -7 |
Q2:如何查找并删除大于100MB的文件?
1 | find /path -type f -size +100M -delete |
Q3:如何查找特定用户拥有的文件?
1 | find /path -user username -type f |
3. 系统监控相关
Q1:top命令中的load average是什么意思?
- load average表示系统的平均负载,分别是1分钟、5分钟、15分钟的平均值
- 理想情况下应该小于CPU核心数
Q2:如何排查CPU使用率过高的问题?
- 使用top命令找出高CPU进程
- 使用ps命令查看进程详细信息
- 使用strace跟踪系统调用
- 分析应用程序日志
Q3:如何检测内存泄漏?
- 使用valgrind工具
- 监控内存使用趋势
- 分析堆转储文件
- 检查资源是否正确释放
4. 故障排查相关
Q1:系统OOM Killer触发了,如何分析?
- 查看/var/log/syslog中的OOM日志
- 分析dmesg输出
- 检查进程的OOM分数
- 优化内存使用或增加内存
Q2:如何排查磁盘空间不足?
- 使用df -h查看磁盘使用情况
- 使用du -sh查找大文件
- 清理日志文件
- 删除不必要的文件
5. 网络诊断相关
Q1:如何查看端口是否被占用?
1 | netstat -tulnp | grep :80 |
Q2:如何分析大量TIME_WAIT连接?
- 调整tcp_fin_timeout参数
- 启用tcp_tw_reuse和tcp_tw_recycle
- 优化应用程序连接管理
总结
Linux系统管理是一项综合性的技能,需要掌握:
- 命令熟练度:熟练使用grep、find、awk等常用命令
- 系统监控:能够使用各种工具监控CPU、内存、磁盘、网络等资源
- 故障排查:具备系统性的故障排查思路和方法
- 性能优化:能够根据实际情况进行系统调优
- 实践经验:通过实际案例积累经验,形成自己的知识体系
建议读者:
- 多动手实践,在测试环境中验证各种命令和参数
- 建立系统化的排查思路,遇到问题时能够快速定位
- 关注系统日志,及时发现潜在问题
- 定期备份重要数据,避免数据丢失
- 持续学习新的工具和技术,跟上技术发展
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 诒森的博客!
评论