您是否有什么简单的想法来在 .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