Linux中搜索程序的命令

Linux中搜索程序的命令

您是否有什么简单的想法来在 .bashrc 中定义一些别名,以便在您的机器中查找您想要搜索的某些命令(当您忘记其名称时),访问所有“bin”目录,也许使用正则表达式?

例如

ls /bin /sbin /usr/bin | grep program

您知道如何使用正则表达式搜索所有 bin 目录吗?

答案1

您可以使用whereis查找与您要搜索的名称匹配的所有二进制文件

> whereis -b ls
ls: /bin/ls

-b选项仅适用于二进制文件,如果没有它,您还会找到源代码和手册页文件

> whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

答案2

使用 bash 函数type。它比 更好,whereis因为它将识别内置于 bash 和别名以及二进制可执行文件的函数。whereis更好,因为它将进行一些模式匹配 -type仅查找您指定的内容。

使用该-a选项显示路径中所有出现的可执行文件。

~$ type python
python is /usr/local/bin/python
~$ type -a python
python is /usr/local/bin/python
python is /usr/bin/python
python is /usr/local/bin/python
~$ whereis -b python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python /usr/local/bin/python2.6 /usr/local/bin/python2.5 /usr/local/bin/python2.7 /usr/local/bin/python2.7-config /usr/local/bin/python2.5-config /usr/local/bin/python2.6-config /usr/local/lib/python2.6 /usr/local/lib/python2.5 /usr/local/lib/python2.7 /usr/include/python2.4

~$ whereis -b time
time: /usr/bin/time /usr/include/time.h
~$ type -a time
time is a shell keyword
time is /usr/bin/time

答案3

这个程序不需要任何外部依赖(只有 shell 内置命令)并且也可以与 busybox ash 一起使用。

但有时您可能不记得具体拼写方式,对于我们这些只需要找到相近匹配的人来说,可以在 .bashrc 中添加这个函数:

find_bin(){
for x in ${PATH//://*${1}* }*${1}*; do
    [ -f "$x" ] && echo $x
done
}

find_bin grep 将列出 $PATH 中所有名称中带有 grep 的二进制文件及其路径 {grep, egrep, fgrep, bugreport,... }

这可以接受以下语法:

  • a*z - 带有亚利桑那州
  • a?z - 带有a<1 个字符>z
  • a[0-9]z - 具有亚利桑那州
  • a[az]z - 具有亚利桑那州
  • a[AZ]z - 具有亚利桑那州
  • a*{a,z}*z - 具有A.... 与 a[az]z 相同

如果你偶尔希望它只匹配整个单词,并且在你输入 grep 时不报告 egrep、fgrep 或 bugreport,你可以删除星号,然后在命令行中只在你想要的位置添加它们

find_bin(){
for x in ${PATH//://${1} }${1}; do
    [ -f "$x" ] && echo $x
done
}

对于这个,需要额外的语法来匹配开头和结尾

  • *grep - 将匹配以 gre 结尾的命令(将找到 grep、egrep 和 fgrep,但不会找到 bugreport)
  • grep - 仅匹配精确的字符串 grep
  • grep* - 将匹配以 grep 开头的命令
  • 上述所有模式也适用

答案4

which确实如此:

which commandname

相关内容