八:别玩捉迷藏了!搜索命令

对于任何一个系统而言,文件的搜索是必不可少的,赶紧看一看Linux下“Ctrl+F”功能怎么使用!

简单的快速通过文件名查找:locate
示例:locate 文件名,默认模糊匹配在数据文件中包含指定文件名的记录。locate命令一个最大的特点在于搜索的速度非常快。因为locate命令不是对本地磁盘上的文件直接进行搜索,而是搜索一个数据文件的内容(当然了,这个数据文件需要包含本地磁盘的文件信息)。这个文件通常位于/var/lib/mlocate(Linux版本之间可能会有细微的不同),看到这里你可能会想,新增的文件是不是会同步的被写入到这个数据文件中呢,答案是不一定,这要看系统刷新数据文件的频度,一般来说是一天,但是你也可以手动强制通过updatedb命令来刷新数据文件的内容(该命令略占系统资源,不要频繁使用)。

不过呢,有些时候,我们搜索一些明明存在的文件时却搜索不到,使用了updatedb命令之后也没有效果。
做一个演示,在系统“/tmp”目录下新建一个文件,名为12345678910.test,这个文件名我认为已经够特殊了。

现在使用locate命令来查找这个文件当然找不到,使用了updatedb之后呢?答案是依然找不到。。这就让人纳闷了,这命令好不好用,为什么找不到,我本人新建的文件,明明摆在那里。
通过不断的man,你会定位到一个叫“/etc/updatedb.conf”的文件,打开看一下

其中我们看到了“/tmp”目录,这有什么联系呢?

当你阅读完帮助文档之后你就会明白,数据文件的加载是有一定的规则的,这些个规则就在“/etc/updatedb.conf”文件中配置,我们会看到,这个配置文件中定义了哪些文件系统需要排除扫描,哪些文件名需要排除扫描,以及哪些目录需要排除扫描。而上图中,“/tmp”目录被列入排除扫描的路径,所以,我们在“/tmp”目录下做演示,出现搜索不到的问题,就没有任何问题。
locate命令能够快速的定位到文件,开销小,效率高,但是遗憾的是,他只能根据文件名来定位文件,而且使用上还有一些不方便(效率带来的代价),或许要刷新数据文件,修改配置文件。

强大的文件搜索命令:find
find命令非常强大,选项非常多,以至于你能想象到的搜索功能他几乎都能实现。下面列举几个常用的示例。

示例1:通过文件名匹配
find [目录] -name 文件名,目录是可选项,如果不设置,则从根目录开始匹配,但是强烈建议缩小查找的范围,节约系统开销,如果有需要,还可以添加“-i”选项忽略大小写
find ~ -name demoFile,查找家目录下名为demoFile的文件
说到通过文件名来匹配,那么通配符是一定要知道的,find命令结合通配符能够完成日常很多查询工作。

常用通配符:
*注意,使用通配符的时候需要给匹配表达式添加引号引起
*:匹配任意多个字符(包括零个或一个)
示例:find ~ -name “a*”,查找家目录下所有以a开头的文件
?:匹配任意一个字符(不包括零个)
示例:find ~ -name “a???”,查找家目录下所有以a开头,文件名长度为四个字符的文件
[characters]:匹配任意一个属于字符集中的字符
示例:find ~ -name “[abc]*”.txt,查找只能包含a或b或c任意一个或多个任意组合,并且以”.txt“结尾的文件
[!characters]:匹配任意一个不是字符集中的字符
同上,取反

常用字符类:
匹配一个字符类,[[:class:]]:匹配任意一个属于指定字符类中的字符
[:alnum:]:匹配任意一个字母或数字
示例:find ~ -name “[[:alnum:]]*.cfg”,查找家目录下含有字母或者数字,并且以”.cfg”结尾的文件
下列字符类使用方式相同
[:alpha:]:匹配任意一个字母
[:digit:]:匹配任意一个数字
[:lower:]:匹配任意一个小写字母
[:upper]:匹配任意一个大写字母

示例2:通过所属用户来匹配
有些时候,在一些公共目录,有很多其他用户创建的文件,我们需要把他们过滤掉
指定所属用户:-user 用户名
示例:find /tmp -user root -name “a*”,查找tmp目录下所有以a开头并且属于root用户的文件
顺便一提,有些文件没有所属用户,可以添加-nouser进行筛选。(没有所有者的文件,一般认为是垃圾文件,但是内核产生的文件不会有所有者,比如内存文件,或者是外来文件,一般是外接设备带来的数据,除了这两种情况,其他情况都视为垃圾文件)

示例3:通多特定时间来匹配
-atime 文件访问时间 +-10(默认单位”天“)
-ctime 改变文件属性 +-10
-mtime 修改文件内容 +-10
示例:
find ~-mtime +10 搜索十天之前,修改过内容的文件
find ~ -ctime -10 搜索十天之内,修改过文件属性
find ~ -atime 10 过去的第十天,被访问过的文件

示例4:通过文件大小来匹配
-size 25k
find /root -size 25k 搜索刚好是25k的文件(但是文件大小一般不会这么巧是25k,尝试搜索”+大于“或者”-小于“k)

示例5:组合匹配
也就是多条件查询
-a:and
find ~ -size +25k -a -size -75k,查找大小介于25~75k的文件
-o:or
find /root -size +25k -o -size -10k,只需要大于25k或者小于10k的文件
之前提到过的种种选项,都可以组合使用,比如就写一个长一点的
find ~ -name “a*” -user root -a -size -5k -a -atime 1,查找以a开头,属于root用户,并且要小于5k,还需要在一天之内被访问过的文件。

命令交接
-exec XXX {} \; 固定格式 ,XXX代表需要的命令,但是要注意,不是所有命令都适用
find ~ -size +25k -o -size -10k -exec ls -l {} \;
将查询的结果通过一个指定的命令进行处理
上面记录的仅仅是选项中很小的一部分,更多需求还需要查阅帮助手册或者搜索引擎。

posted on 2015-06-21 14:47 都较瘦 阅读(119) 评论(0)  编辑  收藏 所属分类: Linux


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

博客定位:囿于目前的水平,博客定位在记录自己的学习心得和随手的练习

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜