1. Linux基础入门从零开始构建系统认知作为SRE工程师的起点Linux系统基础是必须跨越的第一道门槛。记得我刚开始接触Linux时面对黑底白字的终端界面感到无比茫然直到理解了Linux的基本架构才真正打开这扇大门。Linux系统由四个核心部分组成内核、Shell、文件系统和用户空间。内核就像城市的基础设施负责管理CPU、内存等硬件资源Shell则是我们与系统对话的翻译官文件系统把一切都组织成文件而用户空间就是我们日常活动的区域。这种架构设计让Linux既稳定又灵活这也是它能够统治服务器领域的重要原因。Shell的奥秘远不止一个命令行界面那么简单。当我第一次执行echo $SHELL看到输出/bin/bash时才明白原来Shell还有这么多品种。Bash作为最常用的Shell支持命令补全、历史记录等贴心功能。特别是Tab键补全简直是命令行操作的后悔药能避免80%的拼写错误。命令执行的过程就像一场精心编排的芭蕾用户输入命令后Shell会进行翻译解析然后沿着PATH这条寻宝路线查找命令找到后fork出子进程执行最后将结果呈现给用户这个过程中最容易被忽视的是命令的内外之别。内部命令如cd、echo是Shell自带的原生技能执行速度快而外部命令如ls、grep则是独立程序需要启动新进程。用type 命令名可以轻松分辨两者。实用命令锦囊# 查看系统基本信息 uname -a # 显示所有系统信息 lsb_release -a # 显示发行版信息 hostnamectl # 现代Linux查看系统信息 # 高效使用帮助系统 man -k keyword # 模糊查找手册页 命令 --help | less # 分页查看帮助 info 命令 # 获取更详细的文档2. 文件管理和IO重定向掌握数据的脉络Linux哲学中一切皆文件的理念在我第一次尝试操作设备文件时得到了验证。/dev目录下的那些文件原来对应着真实的硬件设备这种统一抽象让系统管理变得异常简洁。文件系统结构就像一棵倒置的大树根目录(/)是树干其他目录是树枝。我花了很长时间才记住各目录的用途/bin和/sbin存放关键命令/etc是配置文件的大本营/var记录着系统的成长日志/proc和/sys则是窥探内核的魔法镜文件操作命令是日常使用频率最高的工具集。ls -l展示的详细信息中第一个字符揭示了文件类型的神秘身份-普通文件d目录l符号链接c字符设备b块设备高阶技巧# 查找并处理文件 find /var/log -name *.log -mtime 30 -exec gzip {} \; # 压缩30天前的日志 # 批量重命名 for file in *.jpg; do mv $file ${file%.jpg}_backup.jpg; done # 统计代码行数 find src/ -name *.py -exec wc -l {} | sort -nrIO重定向和管道是Linux的超能力。把ls的输出重定向到文件只是入门更强大的用法是将多个命令通过管道串联# 分析访问日志前十的IP cat access.log | awk {print $1} | sort | uniq -c | sort -nr | head -n 103. 用户权限管理安全的第一道防线在多用户环境中权限管理就像给每个用户分配不同权限的门禁卡。我曾在生产环境误操作删除重要文件后才真正理解权限控制的重要性。用户和组的管理涉及三个关键文件/etc/passwd存储用户信息/etc/shadow保管加密密码/etc/group记录组信息使用useradd和usermod管理用户时有几个实用选项useradd -m -s /bin/bash -G developers alice # 创建用户并加入附加组 passwd -e alice # 强制用户下次登录修改密码 chage -l alice # 查看账户过期信息文件权限的数字化表示如755其实很好理解第一个数字是所有者权限第二个数字是组权限第三个数字是其他用户权限 每个数字都是r(4)、w(2)、x(1)的和特殊权限像是给文件施加的魔法SUID如/usr/bin/passwd执行时临时获取所有者权限SGID用于目录新建文件自动继承目录的组粘滞位如/tmp只允许所有者删除自己的文件ACL提供了更精细的权限控制setfacl -m u:alice:rwx /shared_dir # 给alice单独设置权限 getfacl /shared_dir # 查看ACL权限4. 文本处理大师vim与正则表达式vim的学习曲线虽然陡峭但掌握后就像获得了文本编辑的瑞士军刀。我花了整整两周时间才适应它的模式切换但现在处理文本的效率提升了数倍。vim的三种模式命令模式移动光标、删除复制等操作插入模式实际编辑文本底线命令模式保存退出等操作几个改变我工作效率的vim技巧ggG自动格式化整个文件缩进:%s/old/new/gc全局替换带确认Ctrlv进入可视块模式进行列编辑:set paste避免粘贴时自动缩进混乱正则表达式是文本处理的终极武器。基础正则和扩展正则的主要区别在于元字符是否需要转义基础正则{ }、( )、等需要转义扩展正则直接使用这些元字符实用正则示例# 提取IP地址 grep -Eo ([0-9]{1,3}\.){3}[0-9]{1,3} access.log # 验证邮箱地址 grep -E ^[A-Za-z0-9._%-][A-Za-z0-9.-]\.[A-Za-z]{2,6}$ emails.txt5. Shell脚本编程自动化运维的基石我的第一个Shell脚本是服务器监控脚本虽然只有20行但让我体会到了自动化的魅力。Shell脚本不需要复杂的开发环境随时随地都能编写执行。脚本调试技巧#!/bin/bash set -euxo pipefail # 开启严格模式 # -e 遇到错误立即退出 # -u 使用未定义变量时报错 # -x 打印执行的命令 # -o pipefail 管道命令失败时整个命令失败 trap echo 错误发生在第 $LINENO 行; exit 1 ERR # 捕获错误实用脚本片段# 检查服务状态 check_service() { if systemctl is-active --quiet $1; then echo $1 is running return 0 else echo $1 is not running return 1 fi } # 备份目录带日期 backup_dir() { local dir$1 local backup_name${dir}_$(date %Y%m%d).tar.gz tar -czf $backup_name $dir echo Backup created: $backup_name }信号捕捉让脚本更健壮cleanup() { rm -f $TEMP_FILE echo 清理临时文件后退出 exit 1 } trap cleanup SIGINT SIGTERM # 捕获中断信号6. 系统管理进阶从进程到服务进程管理是系统运维的核心技能。ps aux的输出看似复杂其实掌握了关键字段就能快速诊断问题%CPUCPU占用率%MEM内存占用率STAT进程状态S休眠、R运行、Z僵尸等START启动时间htop比top更直观支持鼠标操作和颜色标记。我常用的快捷键F5树状显示进程关系F6按不同列排序Space标记进程进行批量操作性能分析需要多维度数据# CPU瓶颈检查 mpstat -P ALL 1 # 查看每个CPU核心的使用情况 # 内存分析 free -h # 查看内存使用概况 vmstat 1 # 监控内存交换情况 # IO分析 iostat -xz 1 # 查看磁盘IO和负载systemd是现代Linux系统的服务管家。管理服务的基本命令systemctl daemon-reload # 修改服务配置后重新加载 systemctl enable --now nginx # 启用并立即启动服务 journalctl -u nginx --since 1 hour ago # 查看服务日志7. 网络安全与防火墙配置SSH安全加固是服务器防护的第一步。除了改用密钥认证还有几个重要配置# /etc/ssh/sshd_config 关键配置 PermitRootLogin no # 禁止root直接登录 MaxAuthTries 3 # 限制认证尝试次数 ClientAliveInterval 300 # 设置超时断开 AllowUsers alice bob # 只允许特定用户登录防火墙策略应该遵循最小权限原则。使用nftables的配置示例#!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; # 允许已建立的连接 ct state established,related accept # 允许本地回环 iif lo accept # 放行SSH tcp dport 22 accept # 记录并丢弃其他入站流量 log prefix Dropped input: group 0 drop } chain forward { type filter hook forward priority 0; policy drop; } chain output { type filter hook output priority 0; policy accept; } }日志监控是发现安全威胁的关键。我常用的日志分析命令# 查找失败的登录尝试 grep Failed password /var/log/auth.log | awk {print $11} | sort | uniq -c # 监控可疑的SSH连接 tail -f /var/log/secure | grep -E Invalid user|Failed password8. 实战案例从问题排查到性能优化典型问题排查流程用户报告服务不可用快速检查ping server # 网络连通性 telnet server 80 # 端口可用性 curl -I http://server # HTTP服务状态登录服务器后检查systemctl status nginx # 服务状态 journalctl -u nginx --since 10 minutes ago # 服务日志 ss -tulnp | grep 80 # 端口监听情况资源检查top # 整体资源使用 df -h # 磁盘空间 free -h # 内存使用性能优化案例 MySQL响应慢的问题排查# 1. 确认是数据库问题 slow_query_log 1 # 启用慢查询日志 long_query_time 1 # 设置慢查询阈值(秒) # 2. 分析慢查询 mysqldumpslow -s t /var/log/mysql/mysql-slow.log # 统计慢查询 # 3. 检查索引使用 EXPLAIN SELECT * FROM large_table WHERE condition; # 4. 优化方案 ALTER TABLE large_table ADD INDEX (column); OPTIMIZE TABLE large_table;自动化运维脚本示例系统健康检查#!/bin/bash set -euo pipefail LOG_FILE/var/log/system_check.log THRESHOLD90 { echo 系统检查开始 $(date) # CPU负载检查 echo -e \nCPU负载 uptime # 内存检查 echo -e \n内存使用 free -h # 磁盘检查 echo -e \n磁盘使用 df -h | awk -v threshold$THRESHOLD NR1 {print} $50 threshold {print; exit 1} # 服务状态检查 echo -e \n关键服务状态 for service in nginx mysql sshd; do if systemctl is-active $service /dev/null; then echo $service: 运行中 else echo $service: 未运行 systemctl restart $service echo $service 已重启 || echo $service 重启失败 fi done echo 检查完成 } | tee -a $LOG_FILE
马哥教育SRE课程实战总结:从Linux基础到系统管理的完整学习路径
1. Linux基础入门从零开始构建系统认知作为SRE工程师的起点Linux系统基础是必须跨越的第一道门槛。记得我刚开始接触Linux时面对黑底白字的终端界面感到无比茫然直到理解了Linux的基本架构才真正打开这扇大门。Linux系统由四个核心部分组成内核、Shell、文件系统和用户空间。内核就像城市的基础设施负责管理CPU、内存等硬件资源Shell则是我们与系统对话的翻译官文件系统把一切都组织成文件而用户空间就是我们日常活动的区域。这种架构设计让Linux既稳定又灵活这也是它能够统治服务器领域的重要原因。Shell的奥秘远不止一个命令行界面那么简单。当我第一次执行echo $SHELL看到输出/bin/bash时才明白原来Shell还有这么多品种。Bash作为最常用的Shell支持命令补全、历史记录等贴心功能。特别是Tab键补全简直是命令行操作的后悔药能避免80%的拼写错误。命令执行的过程就像一场精心编排的芭蕾用户输入命令后Shell会进行翻译解析然后沿着PATH这条寻宝路线查找命令找到后fork出子进程执行最后将结果呈现给用户这个过程中最容易被忽视的是命令的内外之别。内部命令如cd、echo是Shell自带的原生技能执行速度快而外部命令如ls、grep则是独立程序需要启动新进程。用type 命令名可以轻松分辨两者。实用命令锦囊# 查看系统基本信息 uname -a # 显示所有系统信息 lsb_release -a # 显示发行版信息 hostnamectl # 现代Linux查看系统信息 # 高效使用帮助系统 man -k keyword # 模糊查找手册页 命令 --help | less # 分页查看帮助 info 命令 # 获取更详细的文档2. 文件管理和IO重定向掌握数据的脉络Linux哲学中一切皆文件的理念在我第一次尝试操作设备文件时得到了验证。/dev目录下的那些文件原来对应着真实的硬件设备这种统一抽象让系统管理变得异常简洁。文件系统结构就像一棵倒置的大树根目录(/)是树干其他目录是树枝。我花了很长时间才记住各目录的用途/bin和/sbin存放关键命令/etc是配置文件的大本营/var记录着系统的成长日志/proc和/sys则是窥探内核的魔法镜文件操作命令是日常使用频率最高的工具集。ls -l展示的详细信息中第一个字符揭示了文件类型的神秘身份-普通文件d目录l符号链接c字符设备b块设备高阶技巧# 查找并处理文件 find /var/log -name *.log -mtime 30 -exec gzip {} \; # 压缩30天前的日志 # 批量重命名 for file in *.jpg; do mv $file ${file%.jpg}_backup.jpg; done # 统计代码行数 find src/ -name *.py -exec wc -l {} | sort -nrIO重定向和管道是Linux的超能力。把ls的输出重定向到文件只是入门更强大的用法是将多个命令通过管道串联# 分析访问日志前十的IP cat access.log | awk {print $1} | sort | uniq -c | sort -nr | head -n 103. 用户权限管理安全的第一道防线在多用户环境中权限管理就像给每个用户分配不同权限的门禁卡。我曾在生产环境误操作删除重要文件后才真正理解权限控制的重要性。用户和组的管理涉及三个关键文件/etc/passwd存储用户信息/etc/shadow保管加密密码/etc/group记录组信息使用useradd和usermod管理用户时有几个实用选项useradd -m -s /bin/bash -G developers alice # 创建用户并加入附加组 passwd -e alice # 强制用户下次登录修改密码 chage -l alice # 查看账户过期信息文件权限的数字化表示如755其实很好理解第一个数字是所有者权限第二个数字是组权限第三个数字是其他用户权限 每个数字都是r(4)、w(2)、x(1)的和特殊权限像是给文件施加的魔法SUID如/usr/bin/passwd执行时临时获取所有者权限SGID用于目录新建文件自动继承目录的组粘滞位如/tmp只允许所有者删除自己的文件ACL提供了更精细的权限控制setfacl -m u:alice:rwx /shared_dir # 给alice单独设置权限 getfacl /shared_dir # 查看ACL权限4. 文本处理大师vim与正则表达式vim的学习曲线虽然陡峭但掌握后就像获得了文本编辑的瑞士军刀。我花了整整两周时间才适应它的模式切换但现在处理文本的效率提升了数倍。vim的三种模式命令模式移动光标、删除复制等操作插入模式实际编辑文本底线命令模式保存退出等操作几个改变我工作效率的vim技巧ggG自动格式化整个文件缩进:%s/old/new/gc全局替换带确认Ctrlv进入可视块模式进行列编辑:set paste避免粘贴时自动缩进混乱正则表达式是文本处理的终极武器。基础正则和扩展正则的主要区别在于元字符是否需要转义基础正则{ }、( )、等需要转义扩展正则直接使用这些元字符实用正则示例# 提取IP地址 grep -Eo ([0-9]{1,3}\.){3}[0-9]{1,3} access.log # 验证邮箱地址 grep -E ^[A-Za-z0-9._%-][A-Za-z0-9.-]\.[A-Za-z]{2,6}$ emails.txt5. Shell脚本编程自动化运维的基石我的第一个Shell脚本是服务器监控脚本虽然只有20行但让我体会到了自动化的魅力。Shell脚本不需要复杂的开发环境随时随地都能编写执行。脚本调试技巧#!/bin/bash set -euxo pipefail # 开启严格模式 # -e 遇到错误立即退出 # -u 使用未定义变量时报错 # -x 打印执行的命令 # -o pipefail 管道命令失败时整个命令失败 trap echo 错误发生在第 $LINENO 行; exit 1 ERR # 捕获错误实用脚本片段# 检查服务状态 check_service() { if systemctl is-active --quiet $1; then echo $1 is running return 0 else echo $1 is not running return 1 fi } # 备份目录带日期 backup_dir() { local dir$1 local backup_name${dir}_$(date %Y%m%d).tar.gz tar -czf $backup_name $dir echo Backup created: $backup_name }信号捕捉让脚本更健壮cleanup() { rm -f $TEMP_FILE echo 清理临时文件后退出 exit 1 } trap cleanup SIGINT SIGTERM # 捕获中断信号6. 系统管理进阶从进程到服务进程管理是系统运维的核心技能。ps aux的输出看似复杂其实掌握了关键字段就能快速诊断问题%CPUCPU占用率%MEM内存占用率STAT进程状态S休眠、R运行、Z僵尸等START启动时间htop比top更直观支持鼠标操作和颜色标记。我常用的快捷键F5树状显示进程关系F6按不同列排序Space标记进程进行批量操作性能分析需要多维度数据# CPU瓶颈检查 mpstat -P ALL 1 # 查看每个CPU核心的使用情况 # 内存分析 free -h # 查看内存使用概况 vmstat 1 # 监控内存交换情况 # IO分析 iostat -xz 1 # 查看磁盘IO和负载systemd是现代Linux系统的服务管家。管理服务的基本命令systemctl daemon-reload # 修改服务配置后重新加载 systemctl enable --now nginx # 启用并立即启动服务 journalctl -u nginx --since 1 hour ago # 查看服务日志7. 网络安全与防火墙配置SSH安全加固是服务器防护的第一步。除了改用密钥认证还有几个重要配置# /etc/ssh/sshd_config 关键配置 PermitRootLogin no # 禁止root直接登录 MaxAuthTries 3 # 限制认证尝试次数 ClientAliveInterval 300 # 设置超时断开 AllowUsers alice bob # 只允许特定用户登录防火墙策略应该遵循最小权限原则。使用nftables的配置示例#!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; # 允许已建立的连接 ct state established,related accept # 允许本地回环 iif lo accept # 放行SSH tcp dport 22 accept # 记录并丢弃其他入站流量 log prefix Dropped input: group 0 drop } chain forward { type filter hook forward priority 0; policy drop; } chain output { type filter hook output priority 0; policy accept; } }日志监控是发现安全威胁的关键。我常用的日志分析命令# 查找失败的登录尝试 grep Failed password /var/log/auth.log | awk {print $11} | sort | uniq -c # 监控可疑的SSH连接 tail -f /var/log/secure | grep -E Invalid user|Failed password8. 实战案例从问题排查到性能优化典型问题排查流程用户报告服务不可用快速检查ping server # 网络连通性 telnet server 80 # 端口可用性 curl -I http://server # HTTP服务状态登录服务器后检查systemctl status nginx # 服务状态 journalctl -u nginx --since 10 minutes ago # 服务日志 ss -tulnp | grep 80 # 端口监听情况资源检查top # 整体资源使用 df -h # 磁盘空间 free -h # 内存使用性能优化案例 MySQL响应慢的问题排查# 1. 确认是数据库问题 slow_query_log 1 # 启用慢查询日志 long_query_time 1 # 设置慢查询阈值(秒) # 2. 分析慢查询 mysqldumpslow -s t /var/log/mysql/mysql-slow.log # 统计慢查询 # 3. 检查索引使用 EXPLAIN SELECT * FROM large_table WHERE condition; # 4. 优化方案 ALTER TABLE large_table ADD INDEX (column); OPTIMIZE TABLE large_table;自动化运维脚本示例系统健康检查#!/bin/bash set -euo pipefail LOG_FILE/var/log/system_check.log THRESHOLD90 { echo 系统检查开始 $(date) # CPU负载检查 echo -e \nCPU负载 uptime # 内存检查 echo -e \n内存使用 free -h # 磁盘检查 echo -e \n磁盘使用 df -h | awk -v threshold$THRESHOLD NR1 {print} $50 threshold {print; exit 1} # 服务状态检查 echo -e \n关键服务状态 for service in nginx mysql sshd; do if systemctl is-active $service /dev/null; then echo $service: 运行中 else echo $service: 未运行 systemctl restart $service echo $service 已重启 || echo $service 重启失败 fi done echo 检查完成 } | tee -a $LOG_FILE