Linux搜索命令

1
2
3
4
5
locate/updatedb
whereis
which
find
grep

locate/updatedb文件搜索命令—快速

locate命令通过查找数据库来搜索文件

列出所有文件名含有mcstr的文件

1
locate mcstr

列出指定目录下文件名由in开头的文件

1
locate /etc/in

新建文件并通过locate搜索—找不到

1
2
touch beiping.beiping
locate beiping

之所以找不到,是因为locate是通过数据库归档文件进行搜索的,这也正是为什么locate会比较快速的完成搜索的原因。

1
2
3
touch beiping96.beiping96
updatedb
locate beiping96

通过手动执行updatedb命令就可以查找到刚新建的文件。

updatedb命令用于更新数据库归档文件

操作系统实际上会自己执行updatedb命令,只不过每天才会执行一次,这就是导致locate命令可以搜索到历史的文件,而搜索不到刚新建的文件的原因。

whereis 命令搜索命令

whereis命令只能用于搜索程序名,有2个较常用的参数。

只搜索命令的二进制文件

1
whereis -b ls

只搜索命令的man说明文件

1
whereis -m ls

缺省情况

1
2
whereis ls
whereis -m -b 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
2
3
4
find . -name "str"    ## 搜索当前目录下文件名为str的文件
find -name "str*" ## 搜索当前目录下文件名以str开头的文件
find . -name "*str" ## 搜索当前目录下文件名以str结束的文件
find -name "*str*" ## 搜索当前目录下文件名含有str的文件

按照文件权限进行搜索

1
find /tmp/ -perm 777  ## 搜索/tmp/目录下权限为777的文件

按照文件所属进行搜索

1
2
3
4
find /home/ -user root ## 搜索/home/目录下所属者为root的文件
find /home/ -group git ## 搜索/home/目录下所属组为git的文件
find / -nouser ## 搜索/目录下无所属者的文件
find / -nogroup ## 搜索/目录下无所属组的文件

按照文件大小进行搜索

1
2
3
4
find -size +1M            ## 搜索当前目录下大于1MB的文件
find -size -5k ## 搜索当前目录下小于5KB的文件
find -size 10k ## 搜索当前目录下等于10KB的文件
find -size -1M -size -10k ## 大于10KB且小于1MB

注意:KBk是小写,而MBM是大写(玛德智障)

按照文件更改时间进行搜索

1
2
3
4
find -mtime -10           ## 搜索当前目录下更改时间10-今天的文件
find -mtime +5 ## 搜索当前目录下更改时间早于5天前的文件
find -mtime 5 ## 搜索当前目录下更改时间为5天前的文件
find -mtime -10 -mtime +5 ## 5-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
2
find . -name "*str*" -exec ls -la {} \;   ## 搜索当前目录下文件名含有str的文件,并使用 `ls -la` 将其列出
find . -name "*str*" -exec rm -rf {} \; ## 搜索当前目录下文件名含有str的文件,并使用 `rm -rf` 将其强制删除(慎重!!!)

grep文本搜索工具

grep是使用正则表达式搜索文件内的字符的命令(不介绍正则相关内容)。
grep [Option]... <Pattern> [File]...

1
2
3
grep str ./somefile      ## 搜索当前目录下的somefile中含有str(区分大小写)字符的行,打印行号
grep -i str ./somefile ## 搜索当前目录下的somefile中含有str(不区分大小写)字符的行,打印行号
grep -v str ./somefile ## 搜索当前目录下的somefile中不含有str(区分大小写)字符的行,打印行号

搜索命令差异比较

命令 搜索目标 匹配模式 特点
locate 文件 包含匹配 快速,高效
whereis 命令 - 搜索命令文件
which 命令 - 按照$PATH搜索命令文件
find 文件 完全匹配 强大
grep 文件内字符搜索 包含匹配 正则