标签:
which命令
which用来查找系统命令,比如ls、cat等,它是从PATH变量指定的文件夹中搜索的,当指定的文件夹中有与该命令同名的二进制文件时,就会给出这个文件的路径,也就是该命令的路径。
但是,好像必须是二进制文件才可以,我试过在/usr/bin中随便加一个文件,然后which并没有搜出来:
m@meng:/bin$ sudo touch new
m@meng:/bin$ which new
m@meng:/bin$
然并卵啊。。。
which在默认情况下,只返回第一个匹配到的结果;加上-a参数,可以返回所有匹配结果。
locate命令
该命令查找文件的方式是搜寻系统中的一个数据库,如果要找的文件或命令在该数据库中有相应的记录,那么就可以返回相应的结果,否则就查找不到。这个数据库呢,称为“系统文件索引数据库”(嗯,没错,本大人起的名字),它是由updatedb命令建立和维护的,man一下这个命令,可以看到这个数据库文件的位置是/var/lib/mlocate/mlocate.db(我的是Ubuntu系统14.04),用vim打开是一堆乱码,我也就死了那条研究它的心。
总之,locate和下面将要提到的whereis命令都是通过读取这个数据库文件而实现快速查找的。man手册上说:updatedb is usually run daily by cron(8) to update the default database. 这意味着,updatedb在每天某个固定的点才会去更新数据库。所以,可能刚刚新建的文件还没有被加入数据库因而查找不到,这个时候需要手动输入updatedb来更新数据库。
locate命令的基本格式为:locate options pattern,pattern就是任意的字符串,当然一般我们要搜寻的是一个文件名或其路径。这个pattern是支持正则表达式的,man手册说:If –regex is not specified, PATTERNs can contain globbing characters. If any PATTERN contains no globbing characters, locate behaves as if the pattern were *PATTERN* .
然后是常用的几个选项:
- -c:count,计数,即只列出有多少个匹配项,不列出那些匹配结果。
- -e:exist,在所有匹配pattern的项里,若某个项此时(locate命令此次运行时)已经不存在(被删除或重命名),将不再显示。只显示那些仍然存在的项。
m@meng:~$ locate -e m/new
/home/m/new
m@meng:~$ mv new old
m@meng:~$ locate -e m/new
m@meng:~$
重命名之后,再用locate搜索new就找不到了。。
whereis命令
虽然都是查询同一个数据库,但是whereis和locate查找使用的关键字不太一样,locate可以查找任意的字符串,但whereis只能查找那些可执行的二进制文件,比如系统命令,或者通过yum、apt-get等安装的软件的名字,而普通文件它基本上是不理会的。
默认情况下,whereis命令会输出有关程序(命令或可执行二进制文件)的三项位置信息:二进制文件本身、man说明文档、源代码。如下:
m@meng:~/program/C_codes$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
一般系统命令的源码默认没有安装,所以不显示。
有几个选项可以控制whereis的输出或者查找项:
* find命令*
这个是最强大的文件搜索命令,但是速度比不上locate。其基本的语法为:find 路径 选项 其他。暂时就不写它了,需要专门写一篇文章才能搞定。
标签:
原文地址:http://blog.csdn.net/u012668018/article/details/46642693