locate
whereis
和which
命令之间的基本区别是什么。
我观察到的基本区别是locate
定位整个文件系统中的所有相关文件名,而whereis
和which
命令仅提供已安装应用程序的位置(文件的系统/本地地址)。我的观察有多准确?
这些命令在内部是如何实现的。为什么locate
与破折号搜索相比,工作速度如此之快,而locate
必须在整个文件系统层次结构中搜索与目标字符串匹配的特定文件名?
答案1
which
找到程序的二进制可执行文件(如果它在你的PATH中)。man which
解释得更清楚:
如果其参数是作为严格符合 POSIX 的 shell 中的命令给出的,则返回将在当前环境中执行的文件(或链接)的路径名。它通过在 PATH 中搜索与参数名称匹配的可执行文件来实现此目的。它不遵循符号链接。
whereis
查找程序的二进制文件、源代码和手册页文件。例如
$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz
您可以通过将这些命令的输出作为参数传递给ls -l
或来获取更多详细信息file
$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8
$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8
locate
确实会找到所有在路径中任何地方指定了模式的文件。你可以告诉它只查找以下文件和目录:名称(而不是完整路径)包含带有选项的模式-b
,这通常是您想要的,并且提供了一个不太笨重的列表。
locate
速度很快,因为它使用定期更新的二进制数据库(每天一次,由 更新cron
)。您可以自行更新它,以确保可以找到最近添加的文件,方法是运行sudo updatedb
还有一件事locate
- 它不关心文件是否仍然存在,因此为了避免找到最近删除的文件,请使用-e
。我经常也会通过管道传输到,less
因为列表可能很长。通常我会这样做:
sudo updatedb && locate -b -e gimp | less
解释 Unity Dash 的工作原理这里- 它用时代精神索引系统文件并从使用模式中学习,并允许其他应用程序利用这些数据,因此它比 做的工作多得多locate
。
答案2
简单地
$ which samba
which 命令搜索 PATH 设置中列出的程序列表
$ whereis samba
whereis 命令还会搜索 PATH 设置中不存在的程序
$locate samba
也按文件名查找文件,但不搜索目录结构本身,而只搜索 updatedb 准备的数据库。因此,locate 比 find 更快,但准确性较差。示例:
答案3
我还建议找到打印所有结果
find . -type d -name gimp -print
如果你决定删除使用
find . -type d -name gimp -print -delete
我希望这对其他人有帮助