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

如何在Bash中获取/usr/bin下各可执行文件的简要描述?

获取/usr/bin下可执行文件的man NAME描述并排序

这是一个可以直接运行的Bash脚本,完美匹配你的需求:

cd /usr/bin && for exe in *; do
  # 只筛选有执行权限的文件
  if [ -x "$exe" ]; then
    # 调用man命令提取NAME部分,忽略无man页的错误输出
    man "$exe" 2>/dev/null | awk '/^NAME$/{getline; print $0}' | sed -E 's/^([^ ]+) +- (.*)/\1 - \2/'
  fi
done | sort

各部分逻辑拆解:

  1. cd /usr/bin:先切换到目标目录,避免处理复杂路径,直接遍历文件名即可
  2. for exe in *:遍历目录下的所有文件
  3. if [ -x "$exe" ]:确保只处理具备执行权限的可执行程序
  4. man "$exe" 2>/dev/null:调用对应程序的man手册,2>/dev/null用来忽略那些没有man页的程序抛出的错误,避免干扰最终输出
  5. awk '/^NAME$/{getline; print $0}':精准定位到man手册里的NAME标题行,然后获取下一行的命令描述内容
  6. sed -E 's/^([^ ]+) +- (.*)/\1 - \2/':统一格式,把NAME行里的多空格、不规则分隔转换成标准的命令 - 描述样式
  7. | sort:最后将所有结果按字母顺序排序输出

优化版(适配多命令NAME行)

如果遇到某些程序的man页NAME部分同时列出多个关联命令(比如grep, egrep, fgrep - print lines matching a pattern),上面的脚本可能会输出不准确的内容,这个优化版能确保每个可执行文件对应自己的描述:

cd /usr/bin && for exe in *; do
  if [ -x "$exe" ]; then
    man "$exe" 2>/dev/null | awk -v exe="$exe" '/^NAME$/{flag=1;next} flag && /^[^ ]/{sub(/^[^-]+- /,""); print exe " - " $0; flag=0}'
  fi
done | sort

这个版本通过awk传递当前遍历的命令名,替换掉NAME行里的命令前缀,直接输出当前程序名+描述,避免多命令场景下的混乱。

内容的提问来源于stack exchange,提问作者André Shevantes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:26