find是最多见和最强大的查找命令,你能够用它找到任何你想找的文件。linux
find的使用格式以下:web
$ find <指定目录> <指定条件> <指定动做>shell
- <指定目录>: 所要搜索的目录及其全部子目录。默认为当前目录。数据库
- <指定条件>: 所要搜索的文件的特征。ruby
- <指定动做>: 对搜索结果进行特定的处理。oracle
若是什么参数也不加,find默认搜索当前目录及其子目录,而且不过滤任何结果(也就是返回全部文件),将它们全都显示在屏幕上。app
find的使用实例:dom
$ find . -name "my*"jsp
搜索当前目录(含子目录,如下同)中,全部文件名以my开头的文件。ide
$ find . -name "my*" -ls
搜索当前目录中,全部文件名以my开头的文件,并显示它们的详细信息。
$ find . -type f -mmin -10
搜索当前目录中,全部过去10分钟中更新过的普通文件。若是不加-type f参数,则搜索普通文件+特殊文件+目录。
locate命令实际上是“find -name”的另外一种写法,可是要比后者快得多,缘由在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地全部文件信息。Linux系统自动建立这个数据库,而且天天自动更新一次,因此使用locate命令查不到最新变更过的文件。为了不这种状况,能够在使用locate以前,先使用updatedb命令,手动更新数据库。
locate命令的使用实例:
$ locate /etc/sh
搜索etc目录下全部以sh开头的文件。
$ locate ~/m
搜索用户主目录下,全部以m开头的文件。
$ locate -i ~/m
搜索用户主目录下,全部以m开头的文件,而且忽略大小写。
whereis命令只能用于程序名的搜索,并且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。若是省略参数,则返回全部信息。
whereis命令的使用实例:
$ whereis grep
which命令的做用是,在PATH变量指定的路径中,搜索某个系统命令的位置,而且返回第一个搜索结果。也就是说,使用which命令,就能够看到某个系统命令是否存在,以及执行的究竟是哪个位置的命令。
which命令的使用实例:
$ which grep
type命令其实不能算查找命令,它是用来区分某个命令究竟是由shell自带的,仍是由shell外部的独立二进制文件提供的。若是一个命令是外部命令,那么使用-p参数,会显示该命令的路径,至关于which命令。
type命令的使用实例:
$ type cd
系统会提示,cd是shell的自带命令(build-in)。
$ type grep
系统会提示,grep是一个外部命令,并显示该命令的路径。
$ type -p grep
加上-p参数后,就至关于which命令。
which 查看可执行文件的位置
whereis 查看文件的位置
locate 配 合数据库查看文件位置
find 实际搜寻硬盘查询文件名称
一、which
语法:
[root@redhat ~]# which 可执行文件名称
例如:
[root@redhat ~]# which passwd
/usr/bin/passwd
which是经过 PATH环境变量到该路径内查找可执行文件,因此基本的功能是寻找可执行文件
二、whereis
语法:
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称
参数说 明:
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件
例如:
[root@redhat ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
将和passwd文件相关的文件都查找出来
[root@redhat ~]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd
只将二进制文件 查找出来
和find相比,whereis查找的速度很是快,这是由于linux系统会将 系统内的全部文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率天然会很高。
可是该数据库文件并非实时更新,默认状况下时一星期更新一次,所以,咱们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚创建文件,却没法查找到,缘由就是由于数据库文件没有被更新。
三、 locate
语法:
[root@redhat ~]# locate 文件或者目录名称
例 如:
[root@redhat ~]# locate passwd
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp
/lib/security/pam_unix_passwd.so
/lib/security/pam_passwdqc.so
/usr/include/rpcsvc/yppasswd.x
/usr/include/rpcsvc/yppasswd.h
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph
/usr/lib/kde3/kded_kpasswdserver.la
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb
/usr/bin/vncpasswd
/usr/bin/userpasswd
/usr/bin/yppasswd
…………
四、 find
语法:
[root@redhat ~]# find 路径 参数
参 数说明:
时间查找参数:
-atime n :将n24小时内存取过的的文件列出来
-ctime n :将n24小时内改变、新增的文件或者目录列出来
-mtime n :将n*24小时内修改过的文件或者目录列出来
-newer file :把比file还要新的文件列出来
名称查找参数:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户者名称为name的文件
-name file :寻找文件名为file的文件(可使用通配符)
例 如:
[root@redhat ~]# find / -name zgz
/home/zgz
/home/zgz/zgz
/home/weblogic/bea/user_projects/domains/zgz
/home/oracle/product/10g/cfgtoollogs/dbca/zgz
/home/oracle/product/10g/cfgtoollogs/emca/zgz
/home/oracle/oradata/zgz
[root@redhat ~]# find / -name 'zgz'
/home/zgz
/home/zgz/zgz1
/home/zgz/zgzdirzgz
/home/zgz/zgz
/home/zgz/zgzdir
/home/weblogic/bea/user_projects/domains/zgz
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004
/home/weblogic/bea/user_projects/domains/zgz/zgz.log
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005
当咱们用whereis和locate没法查找到咱们须要的文件时,可使用find,可是find是在硬盘上遍历查 找,所以很是消耗硬盘的资源,并且效率也很是低,所以建议你们优先使用whereis和locate。 locate 是在数据库里查找,数据库大至天天更新一次。 whereis 能够找到可执行命令和man page find 就是根据条件查找文件。 which 能够找到可执行文件和别名(alias)