在Linux中列出所有可用命令和别名
1. 概述
有时在 Linux 中工作时,我们想知道系统支持的所有命令和别名。
众所周知,别名是用于引用实际命令的自定义快捷方式。它可以通过将长命令自定义为短字符串来帮助我们节省时间。
在本教程中,我们将看到三种列出 Linux 中所有可用命令和别名的方法——使用*compgen 命令、使用alias *命令以及编写 Bash 脚本。
2. 使用compgen命令
使用compgen命令,我们可以使用不同的选项列出命令、别名、内置函数、关键字和函数。
2.1.列出命令
我们使用compgen -c命令列出所有可用的命令:
$ compgen -c
alert
egrep
fgrep
grep
l
la
ll
ls
...
在这里,-c选项告诉compgen列出我们可以在系统上执行的所有命令。
2.2. 列出别名
我们使用compgen -a命令列出所有可用的别名:
$ compgen -a
alert
egrep
fgrep
grep
l
la
ll
ls
...
在这里,-a选项告诉compgen列出所有别名。
3. 使用alias命令
使用alias命令,我们可以列出定义的别名:
$ alias -p | cut -d= -f1 | cut -d' ' -f2
alert
egrep
fgrep
grep
l
la
ll
ls
...
这里,-p选项告诉alias命令打印所有定义的别名。然后,我们将输出传递给第一个*cut 命令。cut命令使用=符号作为分隔符将一行划分为字段,-f1*表示我们取第一个字段。
我们通过管道将第一个cut命令的输出传递给第二个cut命令。它使用空格作为分隔符,我们选择第二个字段并将其显示在终端上。
4. 使用 Bash 脚本
我们可以编写一个 Bash 脚本来列出我们系统上所有可用的命令:
#!/bin/bash
echo $PATH | tr : '\n' |
while read e; do
for i in $e/*; do
if [[ -x "$i" && -f "$i" ]]; then
echo $i
fi
done
done
让我们分解上面的脚本。首先,我们使用*$PATH 环境变量获取所有包含可执行文件的目录路径。然后,我们将输出通过管道传递给tr 命令。tr命令将:从输入转换为换行符,并将输出通过管道传输到while*循环。
while循环使用*read * 命令读取每一行并将每个步骤的内容存储在*$e中。使用for循环,我们遍历每个目录并使用-x选项检查每个文件是否是可执行文件。-f*选项检查文件是否存在以及它是否是常规文件。
一旦文件名通过了两个测试,它的路径就会使用*echo *命令显示在终端上。
现在,让我们运行脚本并检查其输出:
$ bash commands.sh
/usr/sbin/aa-remove-unknown
/usr/sbin/aa-status
/usr/sbin/aa-teardown
/usr/sbin/accessdb
/usr/sbin/add-shell
/usr/sbin/addgnupghome
/usr/sbin/addgroup
/usr/sbin/adduser
/usr/sbin/agetty
...
在这里,我们可以看到所有命令的绝对路径。