首页 > Sysadmin > 正文

Linux 列出所有可用命令的 5 种方法

huyuanwen 2026-11-02 Sysadmin

草稿待审。

想在 Linux 里快速盘活所有可用命令,这五条命令各有侧重。

compgen:bash 内置命令罗列

compgen 是 bash 的内置命令,用于按补全规则生成匹配项 [1]。用 -c 选项会列出当前 shell 能找到的全部可执行文件名,包括内置、别名和 PATH 目录里的程序。

compgen -c | sort -u | wc -l

实测 Ubuntu 24.04 输出 7058 条,远超 /usr/bin 目录本身的条目数 [1]。这是因为 compgen -c 会把 shell 内置、别名、函数、哈希表条目也一起列出来。

如果需要只看某一类,还可以用:

  • compgen -a 列出别名
  • compgen -b 列出内置命令

ls:查看标准目录

/usr/bin 和 /usr/local/bin 是绝大多数发行版存放用户级命令的标准位置。直接列目录可以得到一份不含 shell 内置的”纯程序”清单。

ls /usr/bin | wc -l

实测输出 923 个条目。加上 /usr/local/bin、/sbin 等目录后更完整,但不会包含 bash 内置和别名。

command -v:确认命令存在

command -v 是 POSIX 定义的标准方式,用于判断一个名称在当前环境里能否作为命令执行 [2]。

command -v python3

找到时返回第一个匹配的完整路径;未找到则无输出且返回非零状态。适合脚本做前置探测。

type -a:追查命令位置

type 会说明 shell 怎样解释一个名称,-a 会把 PATH 里所有同名实例都列出来 [3]。

type -a python3

典型输出会同时显示 /usr/bin/python3 和 /usr/local/bin/python3,便于判断哪个先被加载,或者是否存在冲突副本。

apropos/man -k:手册库关键词搜索

如果只知道功能描述但不知道命令名,可以用 apropos 搜索手册页的标题和简介 [4]。

apropos scheduler

返回结果会显示命令名、章节号和一句话说明。man -k 是它的同义词 [4]。

排错与局限性

现象 原因 处理
compgen 无输出 在非交互 shell 且未初始化补全 改用 ls /usr/bin
command -v 无输出 命令不在 PATH 中 检查 PATH 或使用绝对路径
type -a 只显示一行 该命令在 PATH 中只有一个实例 正常现象
apropos 无结果 手册数据库未建立 执行 mandb 或安装 man-db
  • compgen 结果受当前 shell 状态(函数、别名、哈希表)影响,不同用户或不同终端看到的结果可能不同
  • /usr/bin 只是约定俗成的位置,容器或定制系统可能把程序放在别处
  • command -v 和 type 只告诉你”能不能找到”,不告诉你”是不是最新版本”
  • apropos 依赖 mandb 建立的数据库,最小容器默认可能缺失

附录

  • 测试机:WSL2 Ubuntu 24.04.4 LTS
  • 内核:Linux 6.6.114.1-microsoft-standard-WSL2
  • 测试日期:2026-11-02
  • 观察结果:compgen -c 输出 7058 条;ls /usr/bin 输出 923 条;command -v ls 返回 /usr/bin/ls;type -a ls 显示 /usr/bin/ls 与 /bin/ls 两个位置;apropos -s 1 . 正常返回手册条目。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。