Linux中的搜索命令
Linux中提供多个强大的搜索命令,当然,强大也就意味着需要一定的学习成本,或者说记忆成本。当然,好在我们随时可以使用man等相关指令查看指令帮助文档,所以忘记了或者不会用了就看一下,用得多了自然就不用每次都看帮助了。下面进入正题。

文件搜索命令locate
locate是一个比较常用的文件搜索指令,其最基本的指令就是locate + 文件名。由于其遍历的是数据库,所以速度非常快。
数据库的位置:/var/lib/mlocate          (注:不同Linux发行版数据库目录名称可能有些许差异)

使用locate指令需要注意的几个点:
(1)其搜索的是数据库,而这个数据库每天自动更新一次。所以你当天创建的文件直接使用locate指令搜索的话搜索不到。若要想搜索到,你需要手动刷新数据库
updatedb
(2)在某些目录下的文件被忽略,无法搜索到,如/tmp下的文件。并且某些文件格式和磁盘格式也被忽略。这个规则依赖于配置文件:/etc/updatedb.conf

配置文件内配置了哪些格式和路径会被忽略,首行配置指示是否依照该文件进行配置,yes启用,no不启用。不同Linux发行版默认配置文件也会有些许差异,centos 6.x如下:
文章正文图片
Ubuntu如下(可以看到,默认注释了“忽略 .git .hg .svn 文件”一句): 文章正文图片


命令搜索指令:whereis 和 which
whereis : 搜索命令所在位置及相关帮助指令
可选参数: -b : 只查找可执行文件
                  -m : 只查找帮助文件
如:whereis ls;可以看到 ls 指令的位置及帮助指令的位置都显示了:
文章正文图片

which :搜索命令所在的路径及别名(不是所有命令都有别名,如 pwd 就没有别名)
如:which ls, 可以看到我们执行ls实际上是执行了 ls --color=auto, 也就是使用预设的颜色配置,所以用ls指令查看目录文件时,不同文件才显示了不同的颜色:
文章正文图片

值得注意的点:
(1)whereis 和 which 只能检索外部指令(可以简单理解为 $PATH 中配置的路径中存在的指令),无法检索shell内置指令,如 cd。可以看到执行 whereis cd 只显示了 cd 的帮助文件的路径:
文章正文图片


文件搜索命令:find
find是一个非常强大的文件搜索指令,可组合项或者说可定制项非常多。find是在系统中搜索符合条件的文件名。如果需要匹配则使用通配符“* ?[]”进行匹配。
通配符* :匹配任意内容
             ?:匹配任意一个字符
             [ ] :匹配[ ]内任意一个字符
基本格式find  [搜索范围]  [搜索条件]
常用选项-name : 依文件名搜索  
                              示例:find . -name abc.txt
                 -iname: 依文件名搜索且忽略大小写  
                              示例:find . -iname abc.txt
                 -user   : 按所有者搜索  
                              示例:find . -user root
                 -nouser: 查找没有所有者的文件
                              示例:find . -nouser
                 -mtime: 按文件修改(modify)时间查找
                              示例:find . -mtime +10            (查找当前目录下10天前修改的文件)
                              # 相应的“-10”就是10天内,“10”就是第十天当天
                -atime  : 按文件访问(access)时间查找
                -ctime  : 按文件属性变更(change)时间查找
                -size    : 按照文件大小检索
                             示例:find . -size +10k         (查找当前目录下文件大小大于10k的文件)
                             #相应的“-10k”就是小于10k, "10k"就是等于10k, 也可以是其他单位,如M,G等
                -inum  : 按文件 i 节点查找
稍微复杂一点的组合操作
示例:查找当前目录下大于20k小于50k的文件:
find . -size +20k -a -size -50k
支持的逻辑操作-a : 逻辑与
                           -o : 逻辑或

示例:查找当前目录下大于20k小于50k的文件并显示详细信息:
find . -size +20k -a -size -50k -exec ls -lh {}\;
注意 "-exec" "{}\;" 是匹配出现的固定写法,只要出现 "-exec", 后面就要接上 "{}\;", 中间加上需要执行的命令就行了,另外要保证要执行的命令能够处理前面find查找到结果。 

值得注意的点
(1)find指令是完全匹配。它只会搜索出完全符合的结果,也就是说如果搜索 abc.tar, 结果中不会有abc.tar.gz,如果需要模糊搜索,则要用到通配符“* ?[]”,此例中就是 find ./ -name "abc.tar*"
(2)注意在按文件大小查找时,单位大小写问题,小写【b, c, w, k】, 大写【M, G】。


字符串搜索命令grep
grep用于查找文件中符合条件的字符串。
基本格式grep [选项] 字符串 文件名
常用选项-i : 忽略大小写
                 -v : 排除指定字符串
示例:grep “hello” abc.txt
运行后会打印出abc.txt中包含hello的行。
示例:grep -v “hello” abc.txt
运行后会打印出abc.txt中不包含hello的行。


总结
find是在系统中查找符合条件的文件名,如果需要匹配则使用通配符, 通配符是完全匹配
grep是在文件中查找符合条件的字符串,如果需要匹配则使用正则表达式,并且是包含匹配

 
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门