You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux中获取运行状态的服务并输出其版本信息?

在Linux中用Bash获取运行中服务及其版本的简便方法

不需要Python脚本,用纯Bash命令就能快速实现需求,下面是几种不同输出格式的实现方案:

表格格式输出(对齐易读)

这是最直观的输出方式,会自动对齐服务名和版本:

systemctl list-units -t service --state=active --plain --no-legend --no-page | awk '{print $1}' | while read -r service; do
    # 去掉服务名的.service后缀,大部分服务对应包名和服务名一致
    pkg="${service%.service}"
    # 查询版本,无对应包时输出N/A
    version=$(rpm -q "$pkg" 2>/dev/null || echo "N/A")
    # 格式化对齐,服务名占20字符宽度
    printf "%-20s %s\n" "$service" "$version"
done

CSV格式输出(适合导入表格工具)

如果需要导出到Excel或其他数据分析工具,用CSV格式更方便:

# 输出表头
echo "Service,Version"
systemctl list-units -t service --state=active --plain --no-legend --no-page | awk '{print $1}' | while read -r service; do
    pkg="${service%.service}"
    version=$(rpm -q "$pkg" 2>/dev/null || echo "N/A")
    # 用双引号包裹内容,避免版本中的逗号破坏格式
    printf "\"%s\",\"%s\"\n" "$service" "$version"
done

JSON格式输出(适合程序处理)

如果需要后续用脚本解析,JSON格式更规范,需要提前安装jq工具(yum install jq或apt install jq):

systemctl list-units -t service --state=active --plain --no-legend --no-page | awk '{print $1}' | while read -r service; do
    pkg="${service%.service}"
    version=$(rpm -q "$pkg" 2>/dev/null || echo "N/A")
    # 输出单个JSON对象
    printf '{"service": "%s", "version": "%s"}\n' "$service" "$version"
done | jq -s '.'  # 合并为JSON数组

注意事项

  • 少数服务的包名和服务名不一致(比如network.service对应包network-scripts),遇到这种情况可以在循环中添加case判断手动映射:
    case "$pkg" in
        network) pkg="network-scripts";;
        # 添加更多特殊映射规则
    esac
    
  • 如果是Debian/Ubuntu系统,需要把rpm -q换成dpkg -l | grep -E "^ii $pkg " | awk '{print $3}'来查询版本。

内容的提问来源于stack exchange,提问作者takobaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:15:36