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 
 2- top -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 
 2- grep -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 
 2- uptime 
 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 
 2- netstat -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 
 2- uptime 
 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 
 2- top -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 许可协议。转载请注明来源 诒森的博客!
 评论





