Linux文件查找

Linux文件查找

Linux的基本法则之一为一切皆文件,Linux遵循FHSFilesystem Hierarchy Standard),文件系统目录标准,FHS采用树形结构组织文件;在使用过程中,我们会遇到知道文件名却不知道文件位置的情况,或者查找某些类型的文件,此时我们需要文件查找的功能。

 

一、常用查找命令:

Locatefinad

locate命令为非实时查找模式;非实时查找,需要根据索引查找,依赖于索引,而索引构建相当占用资源;索引的创建是在系统空闲时由系统自动进行(每天任务);手动进行使用updatedb命令。Locate命令,查找速度快,查找不精准且模糊。

find命令为实时查找模式,遍历所有文件进行条件匹配;查找精准,速度慢。

 

二、find命令用法

1、命令格式:

#find [option]... [查找路径] [查找条件] [处理动作]

查找路径:默认为当前目录;

查找条件:默认为指定路径下的所有文件;

处理动作:默认为显示至屏幕;

 

2、查找条件:

2.1、文件名查找:

-name"filename"

-iname"filename":查找时忽略字符大小写;

注意:文件名查找支持使用通配符(globbing);

*任意长度的任意字符;

?任意单个字符;

     []指定范围内的任意单个字符;

     [^]范围之外的任意字符;

 

技术分享

 

2.2、用户和组查找:

-user USERNAME:根据文件的属主查找;

-group GRPNAME:根据文件的属组查找;

 

技术分享

 

-uid UID:根据文件的UID查找;

-gid GID:根据文件的GID查找;

 

技术分享

 

-nouser:查找没有属主的文件;

-nogroup:查找没有属组的文件;

 

技术分享

 

2.3、根据文件类型查找:

-type TYPE:

f:普通文件

d:目录文件

l:符号链接

b:块设备

c:字符设备

s:套接字文件

p:命名管道

 

技术分享

 

2.4、文件大小查找:

-size [+|-]#UNIT

常用单位:kMG,默认为字节;

#UNIT#-1<x<=##表示查找的范围为小于#且大于#-1单位内大小的文件;

-#UNITx<=#-1-#表示的其实是#-1范围内的文件;

+#UNITx>#+#表示的是大于#号的文件;

 

技术分享

 

技术分享

 

技术分享

 

2.5、根据时间戳查找:

以“天”为单位,访问时间:

-atime [+|-]#

+#x>=#+1+#表示#+1天之前被访问过的文件;

-#x<#-#表示小于#天之内的访问过的文件;

##<=x<#+1#表示在##+1天之内访问过的文件;

-mtime:修改时间

-ctime:状态时间

 

技术分享

 

技术分享

 

技术分享

 

以“分钟”为单位,格式同上:

-amin

-mmin

-cmin

 

2.6根据权限查找:

-perm [+|-]MODE

MODE:与MODE精确匹配;

+MODE:任何一类用户的权限只要能包含对其指定的任何一位权限即可;

-MODE:每类用户指定的检查权限都匹配;

为三类用户所有指定的检查权限都能够被包含;

 

技术分享

 

技术分享

 

技术分享

 

2.7、组合条件查找:

-a:与,同时满足

-o:或,满足一个即可

!,-not:非,条件取反

 

-not A -a -not B = -not (A-o B)

-not A -o -not B = -not (A-a B)

 

技术分享

 

技术分享

 

3、处理动作:

-print:显示,默认处理动作;

-ls:类似于ls –l

-exec COMMAND {} \对匹配的文件执行该参数所给出相应的COMMAND

-ok COMMAND {} \;执行命令前需要确认;

技术分享

 

find:一次性查找符合条件的所有文件,并一同传递给给-exec-ok后面指定的命令;但是有些命令不能接受过长的参数;此时使用另一种方式:

find | xargs COMMAND

技术分享

 

三、find补充材料(摘自互联网):

findxargs

在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高。

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。


本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1661836

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。