云原生CI/CD运维【免费下载链接】DevOps-GuideDevOps Guide - Development to Production all configurations with basic notes to debug efficiently.项目地址https://gitcode.com/gh_mirrors/de/DevOps-Guide点击查看免费下载导读本文以 DevOps-Guide 仓库中的LINUX/bash-scripts-manage-system/目录为对象完整解析其自带的系统管理 Bash 脚本system-management.sh这是一个通过select/PS3构建的交互式运维工具覆盖进程资源监控、超标进程筛选、僵尸进程排查、定向 kill以及文件系统检索四大场景。读完本文你将掌握该脚本的每个子功能的底层命令原理ps排序、awk阈值过滤、find全盘检索并了解如何在 Linux 主机上直接运行与二次定制这套运维菜单。脚本总览与快速开始LINUX/bash-scripts-manage-system/目录下包含两个文件运行说明文档 README.md 与核心脚本 system-management.sh。README 给出的运行方式非常简单只有两步chmod x system-management.sh ./system-management.sh第一条命令为脚本赋予执行权限chmod x可参考 LINUX/Basic_Command 中的权限章节r4, w2, x1x即给所有主体追加执行位第二条命令直接以./方式执行。脚本本身是纯 Bash 实现不依赖第三方工具仅要求目标主机具备ps、awk、find、grep、lsblk、kill等 Linux 标准命令因此适用于绝大多数主流发行版。运行后脚本会先执行clear清屏然后进入主菜单整体交互流程如下主菜单选择Manage your Process.进程管理/Adding a iptables rule.iptables 规则当前为占位/Managing your filesystem.文件系统管理/Quit退出进入子菜单后通过输入菜单编号执行对应功能每个子菜单内均提供Exit/Quit/Back to the main Menu...选项返回主菜单。交互式菜单机制PS3 与 select 解析整个脚本的交互骨架建立在 Bash 内建命令select与提示符变量PS3之上。select会读取一个单词列表将其逐行编号打印为菜单并提示用户输入编号用户输入的原始内容保存在内建变量$REPLY中脚本再通过case $REPLY in ... esac分派到对应分支。PS3则用来定制select的提示文本。主菜单的实现system-management.shPS3What do you Want to do: select fruit in Manage your Process. Adding a iptables rule. Managing your filesystem. Quit do case $REPLY in 1) echo Manage your Process. ; ManageProc ;; 2) echo Adding a iptables rule. ;; 3) echo Managing your filesystem. ; ManagefileSys ;; 4) echo Quitting ; sleep 1; break ;; *) echo bad input!!! ;; esac done要点说明变量名fruit仅用于接收被选中的菜单项文本真正决定分支走向的是$REPLY用户键入的数字输入超出范围或非数字时落入*)分支提示bad input!!!并重新显示菜单实现输入容错4)分支通过break跳出select循环脚本随即结束。select循环与菜单式运维脚本的搭配在 Bash 中非常常见读者可结合仓库中的 Bash 脚本基础含函数、变量、条件表达式、循环等语法理解其上下文。彩色输出工具函数 print_style 详解脚本开头定义了一个全局工具函数print_stylesystem-management.sh所有子菜单的输出美化都依赖它print_style () { if [ $2 info ] ; then COLOR96m; elif [ $2 success ] ; then COLOR92m; elif [ $2 warning ] ; then COLOR93m; elif [ $2 danger ] ; then COLOR91m; else #default color COLOR0m; fi STARTCOLOR\e[$COLOR; ENDCOLOR\e[0m; printf $STARTCOLOR%b$ENDCOLOR $1; echo }调用约定为print_style 文本 风格$1是待输出的文本$2是风格关键字。脚本内置四种风格与一种默认风格风格关键字ANSI 颜色码显示效果脚本中的典型用途info96m亮青色Bright Cyan提示性说明、进程信息回显success92m亮绿色Bright Green成功结果本脚本内尚未大量使用warning93m亮黄色Bright YellowCPU/内存筛选结果输出danger91m亮红色Bright Red僵尸进程、危险操作警告其他值0m默认颜色重置兜底分支实现原理是拼接 ANSI 转义序列\e[颜色码作为起始标记、\e[0m作为重置标记再用printf的%b格式符输出%b会解释参数中的反斜杠转义序列从而让\e生效。该函数在后续所有菜单输出中被复用是脚本可读性设计的基石。进程管理模块 ManageProc 深度解析ManageProcsystem-management.sh是整个脚本中功能最丰富的子模块进入后clear清屏并提示This menu facilitates process management...随后展示一个 7 项菜单Top 10 CPU% UsageProcess More Than X CPU Usage(in %)Top 10 Memory% UsageProcess More X Memory Usage(in %)Zombie ProcessKill ProcessExit下面逐一拆解每个分支的命令与原理。Top 10 CPU 占用菜单项 1ps -ax --sort-%cpu --format pid,ppid,cmd,%cpu,%mem | head -n 10ps -axa显示所有终端上的进程x额外包含没有控制终端的进程守护进程等在 GNUps下-a与a语义等价--sort-%cpu按 CPU 使用率降序排序负号表示降序把最耗 CPU 的进程排在最前--format pid,ppid,cmd,%cpu,%mem自定义输出列为 PID、PPID、命令行、CPU%、内存%head -n 10只保留前 10 行即 CPU 占用 Top 10。按阈值筛选高 CPU 进程菜单项 2read -p Please input your CPU% Usage percentage like 10.0: threshold ps -ax --format pid,ppid,%cpu,%mem,cmd,user | awk -v threshold$threshold { if ($3 threshold ) print $0}read -p交互式读取阈值示例提示用户输入10.0这类浮点数--format pid,ppid,%cpu,%mem,cmd,user决定了 awk 的字段布局$1pid、$2ppid、$3%cpu、$4%mem、$5cmd、$6userawk -v threshold$threshold通过-v把 shell 变量注入 awk 环境避免字符串拼接转义问题判断$3 threshold即 CPU 列大于阈值的整行print $0输出。Top 10 内存占用菜单项 3ps ax --sort-%mem --format pid,ppid,%cpu,%mem,cmd,user | head -n 10与 Top 10 CPU 的区别仅在于排序键由-%cpu换成-%memps的%mem表示进程驻留内存占系统物理内存的百分比并按内存降序取前 10。按阈值筛选高内存进程菜单项 4read -p Please input your Memory% Usage percentage like: 10.0: threshold ps -ax --sort-%mem --format pid,ppid,%cpu,%mem,cmd,user | awk -v threshold$threshold {if ($4 threshold ) print $0}字段布局与菜单项 2 相同但 awk 判断的是$4即%mem列是否超过阈值。僵尸进程排查菜单项 5echo This is Zombie Process, please kill them. ps -ax --format pid,ppid,%cpu,%mem,cmd,stat | awk $6 Z { print $0 }输出列顺序为pid,ppid,%cpu,%mem,cmd,statstat进程状态码位于最后一列awk 筛选状态列为Z的行——Z即 Zombie僵尸进程表示进程已终止但其父进程尚未调用wait()回收其退出状态由于cmd列可能包含空格字段序号会随之偏移从脚本结构看更稳健的写法是使用$NF最后一个字段判断stat例如awk {if ($NF Z) print $0}读者在定制脚本时可自行调整。僵尸进程本身已不消耗 CPU/内存但会占用 PID 表项并长期滞留通常需从父进程侧处理或终止其父进程这也是该分支提示please kill them的背景。定向终止进程菜单项 6read -p Enter the PID of the process which you want to delete it: ProcessID ps -ax --sort-%mem --format pid,ppid,%cpu,%mem,cmd,user | awk -v pid$ProcessID {if ($1 pid ) print $0} read -p Enter the signal which you want to send it to the process: signal read -p Are you sure you want to send this signal to this PID? Y|N answer case $answer in Y|y) print_style sending signal ($signal) to the PID ($ProcessID) in 5 second, you can press CtrlC to cancel it. danger; sleep 5 kill -$signal $ProcessID if [[ $? -eq 0 ]] then echo the pid: $PID is successfully killed. fi ;; N|n) echo Nothing to do ;; *) print_style Bad Input danger ;; esac该分支体现了先确认、后执行的安全流程输入目标 PID 后先用awk $1pid回显该进程的完整信息供用户核对注意$1对应--format输出中的pid列再交互输入要发送的信号编号如9强制终止、15优雅终止确认Y|y后脚本以danger风格提示将在 5 秒后发送信号并给出 CtrlC 取消机会执行kill -$signal $ProcessID后检查退出码$? -eq 0判断是否成功。这里有两个值得注意的脚本细节从源码结构看其一成功提示中输出的是$PID而非$ProcessIDsystem-management.sh而$PID在该脚本中并未赋值实际输出为空正确应改为$ProcessID其二kill需要目标进程属于当前用户或具有 root 权限否则会返回非零退出码。文件系统管理模块 ManagefileSys 深度解析ManagefileSyssystem-management.sh提供 4 个文件系统检索功能加 1 个退出项List Hard diskfind a file with sizefind a filefind a pattern in files in your systemQuit列出硬盘与文件系统菜单项 1lsblk -flsblk -f以树状结构列出系统所有块设备-f额外显示文件系统类型如ext4、xfs、UUID、挂载点等信息是快速盘点磁盘布局的标准命令。按大小查找文件菜单项 2read -p Enter the size in M-Byte: fileSize find / -type f -size ${fileSize}M -exec ls -lah {} \;find /从根目录递归遍历-type f限定普通文件-size ${fileSize}M筛选大于指定兆字节数的文件表示大于M为单位-exec ls -lah {} \;对每个命中文件执行ls -lah输出可读大小与权限信息{}是当前文件的占位符\;终止-exec。注意全盘find /需要 root 权限才能完整遍历所有目录且在大型磁盘上耗时较长也可将根路径替换为/home、/var等具体目录以缩小范围。按文件名查找文件菜单项 3read -p What is the name of the file you are Looking for: fileName find / -name $fileName-name按文件名精确匹配区分大小写。从脚本结构看$fileName未加引号若文件名包含空格会被 shell 拆分导致匹配异常更稳妥的写法是find / -name $fileName如需忽略大小写可改用-iname。全盘内容检索菜单项 4read -p Enter the pattern: pattern find / -type f -name * -exec grep -i $pattern {} \;遍历/下所有普通文件-name *匹配全部文件名对每个文件执行grep -i $pattern-i忽略大小写输出包含匹配模式的行该操作等同于全盘grep -r开销最大、输出可能极多建议配合-l只列文件名或限制目录范围使用同样地$pattern建议加引号防止含空格的模式被拆分。主菜单流程与整体控制流脚本的控制流非常清晰可归纳为三层结构主菜单 (select PS3) ├─ 1. ManageProc → 进程管理子菜单7 项 ├─ 2. iptables 规则 → 仅 echo 占位未实现 ├─ 3. ManagefileSys → 文件系统子菜单5 项 └─ 4. Quit → break 退出子菜单内部通过break返回主菜单主菜单通过break结束脚本所有用户输入均通过read -p或select的$REPLY获取非法输入统一由*)分支兜底Bad Input/bad input!!!。已知占位与使用注意事项基于对脚本源码的通读以下几点对实际使用者最有价值iptables 分支尚未实现主菜单第 2 项Adding a iptables rule.目前只有echo Adding a iptables rule. 占位system-management.sh不会真正添加任何防火墙规则选择后即返回主菜单Kill 成功提示的变量笔误echo the pid: $PID is successfully killed.使用了未赋值的$PID实际应引用$ProcessID权限前提find /全盘遍历与kill目标进程均可能需要 root 权限建议以sudo运行或以受限用户运行前评估权限边界引号问题find / -name $fileName与grep -i $pattern中的变量建议加引号以兼容含空格的文件名与模式字段偏移僵尸进程判定用$6匹配stat列当命令行含空格时会偏移可改用$NF。以上均为可验证的源码级观察读者按需修改即可让脚本在生产环境更稳健。结合仓库文档的扩展学习路径本脚本用到的命令与语法在 DevOps-Guide 仓库中有更系统的参考资料可按需深入Bash 脚本基础shebang、变量、read输入、函数定义、条件与循环等语法基础是理解本脚本print_style/ManageProc/ManagefileSys结构的前提Shell 脚本速查 与 Shell 脚本编程shell 概念、select/PS3、常见 shell 差异文本处理awk的字段编号与-v传参、sort的多键排序、grep的检索技巧本脚本的阈值过滤与排序逻辑均可在此找到系统化讲解进程监控 与 性能管理进程状态、资源监控的补充材料LINUX/Basic_Commandchmod/chown/管道等基础命令对应 README 中chmod x的权限含义OS 命令 与 OS 概念Linux 进程模型与系统管理的整体背景。简言之LINUX/bash-scripts-manage-system/提供了一个可运行、可改写的交互式系统管理脚本骨架先按 README 的两条命令直接运行体验再结合仓库的 Bash 与文本处理文档把iptables占位补全、修掉$PID笔误、为find/grep参数加引号即可沉淀为自己的日常运维工具箱。赞分享云原生CI/CD运维【免费下载链接】DevOps-GuideDevOps Guide - Development to Production all configurations with basic notes to debug efficiently.项目地址https://gitcode.com/gh_mirrors/de/DevOps-Guide点击查看免费下载相关推荐DevOps-Guide项目Linux系统性能监控与进程管理命令详解DevOps Guide项目Linux系统性能监控与进程管理命令详解 引言为什么需要系统性能监控 在DevOps实践中系统性能监控是确保服务稳定性和可靠云原生CI/CD运维深度解析Marker如何实现高效文档格式转换与智能提取深度解析Marker如何实现高效文档格式转换与智能提取 Marker文档转换工具是一个基于深度学习的多格式文档处理系统专门解决PDF、图像、PPTX、DOC人工智能AI 应用OCRDevOps-Guide 操作系统命令实战Linux 性能监控与进程管理六大利器top / ps / kill / df / ss / lsofDevOps Guide 操作系统命令实战Linux 性能监控与进程管理六大利器top / ps / kill / df / ss / lsof 本指南以云原生CI/CD运维上一篇Haystack ChatMessageStore 实验组件详解用 InMemoryChatMessageStore 管理多会话对话历史下一篇OmniRoute Auto-Combo 引擎全解析16 因子自适应评分、零配置自动路由与自愈模型链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考