如何找到bash命令?

时间:2012-09-13 08:41:24

标签: linux bash find command

我想这很简单。 我只是想找到一个bash命令。例如,当我想知道哪些命令存在时,包含短语“user”。

所以我正在寻找的命令应该打印出包含用户的所有命令的位置,或者它可以告诉我哪些命令存在于名称中。那会好的。

我在这里和谷歌搜索过,但他们两个都只是谈论“查找”命令。

4 个答案:

答案 0 :(得分:1)

PATH中包含“user”的可执行文件或符号链接列表:

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)

答案 1 :(得分:1)

compgen -c | grep -i "user"
  

compgen [option] [word]

     

根据选项生成可能的单词完成匹配,可以是完整内置接受的任何选项,但-p和-r除外,并将匹配写入标准输出。

     

匹配将以与可编程完成代码直接从具有相同标志的完成规范生成它们相同的方式生成。如果指定了单词,则仅显示匹配单词的那些完成。

     

...

     

-A action该操作可以是以下之一,以生成可能的完成列表:

     

别名别名。也可以指定为-a。

     

arrayvar数组变量名。

     

绑定Readline键绑定名称(请参阅Bindable Readline命令)。

     

builtin shell内置命令的名称。也可以指定为-b。

     

命令命令名称。也可以指定为-c。

     

目录目录名称。也可以指定为-d。

     

禁用已禁用的shell内置命令的名称。

     

已启用已启用shell内置的名称。

     

export导出的shell变量的名称。也可以指定为-e。

     

文件文件名。也可以指定为-f。

     

函数shell函数的名称。

     

组名称组。也可以指定为-g。

     帮助内置的

helptopic帮助主题(参见Bash Builtins)。

     

hostname Hostnames,取自HOSTFILE shell变量指定的文件(参见Bash变量)。

     

作业作业名称,如果作业控制处于活动状态。也可以指定为-j。

     

关键字Shell保留字。也可以指定为-k。

     

如果作业控制处于活动状态,则运行正在运行的作业的名称。

     

服务服务名称。也可以指定为-s。

     

setopt set builtin的-o选项的有效参数(请参阅Set Builtin)。

     

shopt Shell选项名称由shopt builtin接受(参见Bash Builtins)。

     

信号信号名称。

     

如果作业控制处于活动状态,则停止已停止作业的名称。

     

用户用户名。也可以指定为-u。

     

变量所有shell变量的名称。也可以指定为-v。

答案 2 :(得分:0)

您可能想要检查某个路径中的空格并使用更强大的正则表达式来改进它,但这样做可以解决问题:

#!/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

答案 3 :(得分:0)

如果要查找目录中的所有命令,可以在Linux上使用:

find /bin -type f -perm -o+x  -name '*z*'

在此示例中,它将列出/ bin目录中名称中包含z的所有可执行文件(程序)。如果要搜索多个目录,可以编写一个脚本并在循环中调用find,每个目录一次。

您可以将其与之前的答案结合使用,以便在路径上的所有目录中进行搜索:

find $(echo $PATH | tr ':' ' ') -type f -perm -o=x  -name '*z*'