我想这很简单。我只想找到一个 bash 命令。例如,当我想知道存在哪些命令时,包含短语“user”。
所以我正在寻找的命令应该打印我所有包含用户的命令的位置,或者它可以告诉我哪些命令与名称一起存在。不过这样就好了。
我在so和google上搜索过,但是他们都只是谈论“find”命令。
PATH 中包含“用户”的可执行文件或符号链接列表:
find $(echo $PATH | tr ':' ' ') -maxdepth 1 \( -type f -or -type l \) -name '*user*' -executable
样本输出:
/usr/bin/users
/usr/bin/xdg-user-dir
/usr/bin/xdg-user-dirs-gtk-update
/usr/bin/users-admin
/usr/bin/xdg-user-dirs-update
/bin/fuser
/bin/fusermount
/bin/ntfs-3g.usermap
/usr/sbin/deluser
/usr/sbin/adduser
/usr/sbin/useradd
/usr/sbin/userdel
/usr/sbin/usermod
/usr/sbin/newusers
也比 wormsparty 的变体快很多(无意冒犯:P)。结果几乎相同(他也返回目录,AFAIK)
compgen -c | grep -i "user"
compgen [选项] [单词]
根据选项为 word 生成可能的补全匹配,该选项可以是除了 -p 和 -r 之外的所有内置函数接受的选项,并将匹配写入标准输出。
匹配的生成方式与可编程完成代码直接从具有相同标志的完成规范生成它们的方式相同。如果指定了 word,则仅显示匹配 word 的那些完成。
...
-A 动作 该动作可以是以下之一,以生成可能的完成列表:
alias 别名。也可以指定为 -a。
arrayvar 数组变量名。
绑定 Readline 键绑定名称(请参阅可绑定的 Readline 命令)。
builtin shell 内置命令的名称。也可以指定为 -b。
命令 命令名称。也可以指定为 -c。
目录 目录名称。也可以指定为 -d。
disabled 禁用的 shell 内置函数的名称。
enabled 已启用的 shell 内置函数的名称。
导出的 shell 变量的名称。也可以指定为 -e。
文件 文件名。也可以指定为 -f。
function shell 函数的名称。
组 组名称。也可以指定为 -g。
helptopic 内置帮助接受的帮助主题(请参阅 Bash 内置)。
hostname 主机名,取自 HOSTFILE shell 变量指定的文件(请参阅 Bash 变量)。
作业 作业名称,如果作业控制处于活动状态。也可以指定为 -j。
关键字 Shell 保留字。也可以指定为 -k。
running 正在运行的作业的名称,如果作业控制处于活动状态。
服务 服务名称。也可以指定为 -s。
setopt set 内置函数的 -o 选项的有效参数(请参阅 The Set Builtin)。
shopt 内置的 shopt 接受的 Shell 选项名称(请参阅 Bash 内置)。
信号 信号名称。
已停止的作业的名称,如果作业控制处于活动状态。
用户 用户名。也可以指定为 -u。
variable 所有 shell 变量的名称。也可以指定为 -v。
您可能想检查某些路径中的空格并使用更强大的正则表达式对其进行改进,但这可以解决问题:
#!/bin/sh
if [ $# -ne 1 ]; then
echo "Usage: $0 pattern"
exit 1
fi
for x in `echo "${PATH}" | sed 's/:/ /g'`; do
for y in $x/*; do
if [ -x "$y" ]; then
if [ `echo "$y" | grep $1 | wc -l` -ne 0 ]; then
echo "$y"
fi
fi
done
done
如果要查找目录中的所有命令,在 Linux 上可以使用:
find /bin -type f -perm -o+x -name '*z*'
在此示例中,它将列出 /bin 目录中名称中包含 az 的所有可执行文件(程序)。如果要在多个目录中搜索,可以编写脚本并循环调用 find,每个目录一次。
您可以将此与上一个答案结合起来,在您的路径上的所有目录中进行搜索:
find $(echo $PATH | tr ':' ' ') -type f -perm -o=x -name '*z*'