由于工作的需要,少不得要在linux系统上查找各种各样的文件,关于在linux查找的命令有不少,这里小小的总结下。
简单介绍下各个命令的用途:
- find:实际搜索硬盘查询文件名称;
- whereis:查看文件的位置;
- which:查找和可执行文件的位置;
- locate:配合数据库查找文件的位置;
1.find命令
这个命令通过实际搜索硬盘查询文件名称,一般最好能确定文件存在的最小范围,尽量缩小搜索的范围,因为实际搜索硬盘很花时间,尤其是硬盘很大,文件很多的时候。
经常和grep命令一起搜索含有某个字符串的文件,例如:
find /dir -name "*.sh" | grep "abc"
网上有一篇文章讲的很好,引在这里,以方便查阅:
http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html
感谢这篇文章的作者wanqi。
2.whereis命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
同样引用一篇文章:http://codingstandards.iteye.com/blog/986891
3.which命令
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
引一篇参考文章:http://www.cnblogs.com/peida/archive/2012/11/08/2759805.html
感谢文章的作者peida。
4.locate命令
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
也引一篇文章吧:http://www.cnblogs.com/peida/archive/2012/11/12/2765750.html
感谢文章的作者peida。
因此本篇文章并不算原创,只是对网上知识的整理以方便查阅。感谢所有乐于分享的各位~