1  | locate/updatedb  | 
locate/updatedb文件搜索命令—快速
locate命令通过查找数据库来搜索文件
列出所有文件名含有mcstr的文件
1  | locate mcstr  | 
列出指定目录下文件名由in开头的文件
1  | locate /etc/in  | 
新建文件并通过locate搜索—找不到
1  | touch beiping.beiping  | 
之所以找不到,是因为locate是通过数据库归档文件进行搜索的,这也正是为什么locate会比较快速的完成搜索的原因。
1  | touch beiping96.beiping96  | 
通过手动执行updatedb命令就可以查找到刚新建的文件。
updatedb命令用于更新数据库归档文件
操作系统实际上会自己执行updatedb命令,只不过每天才会执行一次,这就是导致locate命令可以搜索到历史的文件,而搜索不到刚新建的文件的原因。
whereis 命令搜索命令
whereis命令只能用于搜索程序名,有2个较常用的参数。
只搜索命令的二进制文件
1  | whereis -b ls  | 
只搜索命令的man说明文件
1  | whereis -m ls  | 
缺省情况
1  | whereis ls  | 
whereis cd
whereis cd找不到任何文件,是因为cd命令是shell内部的命令,并不外部安装的。
which命令搜索命令
which命令会在系统的$PATH路径中搜索命令,并且只返回第一个结果。
1  | which php  | 
所以可以通过which查看php命令是否存在,以及当执行php时到底使用的是哪个位置的php命令。
find文件搜索命令
find是最常见,最强大的搜索命令find可以找到你想找到的一切文件- 当然
find系统损耗比较大,相对而言也比较慢 
1  | find <Directory> <Options> <Actions>  | 
- Directory: 要搜索文件的目录,默认当前目录
 - Options: 要搜索文件的条件
 - Actions: 要对搜索结果进行的操作
 
按照文件名进行搜索
1  | find . -name "str" ## 搜索当前目录下文件名为str的文件  | 
按照文件权限进行搜索
1  | find /tmp/ -perm 777 ## 搜索/tmp/目录下权限为777的文件  | 
按照文件所属进行搜索
1  | find /home/ -user root ## 搜索/home/目录下所属者为root的文件  | 
按照文件大小进行搜索
1  | find -size +1M ## 搜索当前目录下大于1MB的文件  | 
注意:KB的k是小写,而MB的M是大写(玛德智障)
按照文件更改时间进行搜索
1  | find -mtime -10 ## 搜索当前目录下更改时间10-今天的文件  | 
介个天数还挺绕人的
假设当前时间为20号9点
0指 19号9点-20号9点
1指 18号9点-19号9点
2指 17号9点-18号9点
+2指 早于17号9点
-2指 18号9点-20号9点
find结果执行 -exec Command {} \;
1  | find . -name "*str*" -exec ls -la {} \; ## 搜索当前目录下文件名含有str的文件,并使用 `ls -la` 将其列出  | 
grep文本搜索工具
grep是使用正则表达式搜索文件内的字符的命令(不介绍正则相关内容)。grep [Option]... <Pattern> [File]...
1  | grep str ./somefile ## 搜索当前目录下的somefile中含有str(区分大小写)字符的行,打印行号  | 
搜索命令差异比较
| 命令 | 搜索目标 | 匹配模式 | 特点 | 
|---|---|---|---|
locate | 
文件 | 包含匹配 | 快速,高效 | 
whereis | 
命令 | - | 搜索命令文件 | 
which | 
命令 | - | 按照$PATH搜索命令文件 | 
find | 
文件 | 完全匹配 | 强大 | 
grep | 
文件内字符搜索 | 包含匹配 | 正则 |