Linux中,几个查找命令: find locate which whereis type 的查找原理以及基本用法

1. find命令:

man find看了下,find是第归地在层次目录中处理文件。他是最常用和最强大的查找命令。他能做到实时查找、精确查找,但是速度慢。

它的格式如下:
总览 SYNOPSIS
       find [path...] [expression]

描述 DESCRIPTION
       这个文档是GNU版本 find 命令的使用手册。 find 搜索目录树上的每一个文件名,它从左至右运算给定的表达式,按照优先规则进行匹配,直到得出结果(左边运算在 '与' 操作中得出假, 在'或' 操作中得出真),然后 find 移向下一个文件名。

第一个以      '-'      ,       '('       ,       ')'       ,       ','       或       '!'       这些字符起始的参数是表达式的开始;
       在它之前的任何参数是要搜索的路径,在它之后的任何参数都是表达式的余下部分。
       如果没有路径参数,缺省用当前目录。如果没有表达式,缺省表达式 用 '-print'.

当所有文件都成功处理时 find 退出并返回状态值0。如果发生错误则返回一个大于0的值。

表达式 EXPRESSIONS
       表达式是由 选项 (选项总是影响所有的操作,    而不仅仅是一个指定的文件的处理,而且总是返回真值),

                            测试(测试返回一个真值或一个假值),

                  还有  动作 (动作有side    effects,    返回一个真值或假值)
       组成。    它们都以运算符分开.忽略运算符的时候,默认使用  -and  连接.  如果表达式没有包含  -prune  以外的动作,当表达式为真时会执行

实例一: find 查找2天前的文件并展示命令

sudo find /home -maxdepth 2 -ctime +2 -ok ls {} \;       ---查找home目录下2级子目录里面,对文件状态的最近一次修改在2*24小时之前,并显示出这些文件。其中{}是前面find查找结果的参数,而;是结束参数,\是转义符号,转义分号; 使其具有特殊含义。

2. locate 命令

locate按照给的文件名去查找文件,locate命令不是实时查找,所以查找的结果不精确,但查找速度很快。因为它查找的不是目录,而是一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

它的格式如下:

locate [OPTION]... PATTERN...

例:查找所有包含passwd的文件

#locate passwd

例:查找所有包含passwd的文件,并且只显示前十个

#locate -n 10 passwd

3. which 命令

NAME
       which - shows the full path of (shell) commands.

SYNOPSIS
       which [options] [--] programname [...]


从上面可以看出来把,which 查找二进制文件名,返回第一个查找到的二进制文件绝对路径。这是用来查看命令存放目录的一个命令。options可以man查看。

实例: 查看 passwd 命令存放路径:

[hujianmei@localhost ~]$ which passwd
/usr/bin/passwd
[hujianmei@localhost ~]$

4. whereis 命令

NAME
       whereis - locate the binary, source, and manual page files for a command

SYNOPSIS
       whereis [options] [-BMS directory... -f] name...

DESCRIPTION
       whereis  locates  the  binary,  source and manual files for the specified command names.  The supplied names are first stripped of leading
       pathname components and any (single) trailing extension of the form .ext (for example: .c) Prefixes of s.  resulting from  use  of  source
       code  control  are  also  dealt with.  whereis then attempts to locate the desired program in the standard Linux places, and in the places
       specified by $PATH and $MANPATH.

OPTIONS
       -b     Search only for binaries.

       -m     Search only for manuals.

       -s     Search only for sources.

看上面就够了。whereis 用于搜索程序名。 和命令执行路径无关。就是看你这个二进制程序放在哪个目录,以及他的man page文件路径和源码存储路径哈。

实例: 查看 vim 的程序存放路径和man page信息存放路径还有源码存放路径。

[hujianmei@localhost src]$ whereis python
python: /usr/bin/python2.7 /usr/bin/python /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz
[hujianmei@localhost src]$ whereis -s python
python:[hujianmei@localhost src]$
[hujianmei@localhost src]$

5. type 命令

 type命令用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
  
 [root@linux ~]# type [-tpa] name
参数:
    :不加任何参数时,则 type 会显示出那个 name 是外部指令还是 bash 内建的指令!
-t  :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
      file    :表示为外部指令;
      alias   :表示该指令为命令别名所设定的名称;
      builtin :表示该指令为 bash 内建的指令功能;
-p  :如果后面接的 name 为指令时,会显示完整文件名(外部指令)或显示为内建指令;
-a  :会将由 PATH 变量定义的路径中,将所有含有 name 的指令都列出来,包含 alias
范例:
范例一:查询一下 ls 这个指令是否为 bash 内建?
[root@linux ~]# type ls
ls is aliased to `ls --color=tty'
# 没有加上任何参数,仅列出 ls 这个指令的最主要使用情况
[root@linux ~]# type -t ls
alias
# -t 参数则仅列出 ls 这个指令的最主要使用情况说明
[root@linux ~]# type -a ls
ls is aliased to `ls --color=tty'
ls is /bin/ls
# 利用所有方法找出来的 ls 相关信息都会被列出来!

范例二:那么 cd 呢?
[root@linux ~]# type cd
cd is a shell builtin

 
透过 type 这个指令的用途,我们可以知道每个指令是否为 bash 的内建指令。 此外,由于利用 type 搜寻后面的名称时,如果后面接的名称并不能以执行档的状态被找到, 那么该名称是不会被显示出来的。举例来说,您的 FC4 应该不会有 vbird 这个指令吧?! 输入 type -p vbird 看一下,果然没有输出任何数据!而如果您输入的是 type -p touch 呢? 则会出现 /bin /touch !呵呵!所以,这个 type 也可以用来作为类似 which 指令的用途啦!找指令用的!
发布了15 篇原创文章 · 获赞 0 · 访问量 3034

猜你喜欢

转载自blog.csdn.net/xx_ay/article/details/104339948