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 |
文件内字符搜索 | 包含匹配 | 正则 |