linux上的文件查找工具:locate和find

一、非实时超找工具 locate

    1、locate是查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db文件索引实在系统比较空闲的时候自动进行的,是系统的周期性任务,因为是周期性任务,所以有些短期的数据无法更新到数据库,如果需要马上应用,乣管理员手动更新数据库,用命令updatedb来执行。同时索引的构建过程是遍历整个根文件系统,所以非常消耗系统资源,最好是在系统空闲时间进行更新。

    2、locate超找的特点:

    (1)查找速度快。因为是查找预先建立起来的索引数据库,不需要查找整个文件系统,所以速度快速

    (2)模糊超找

    (3)非实时超找

    (4)搜索的文件是全路径,不仅仅是文件名

    (5)只能搜索用户具备读取和执行权限的目录

    3、locate命令的用法

    locate [OPTION] KEYWORD

    常用选项

    -i    执行区分大小写的搜索

    -n X    只列举前X个匹配项目

    -r    支持正则表达式

二、实时超找工具find

   1、find是实时超找工具,查找时通过遍历指定路径完成文件的超找

   2、工作特点

    (1)查找速度略慢

    (2)能够时间精确查找

    (3)实时查找

    (4)只能搜索用户具备读取和执行权限的目录

   3、语法

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

  [查找路径]:

    可以使用-path选项,来使用通配符匹配路径

    指定具体目标路径,默认为当前工作目录,  .指定当前工作目录, ..指定父目录

  [查找条件]:

    指定的查找标准,可以是文件名、大小、类型、权限等标准进行;默认为找出路径下的所有文件

  [处理动作]:

    对符合条件的文件做操作,默认输出值屏幕

   4、查找条件

(1)根据文件名、inode查找和正则表达式查找

    -name “文件名称”,支持使用glob(通配符)* ? [] [^]等。-name总是用给定的文件名进行匹配,

-path则将文件路径作为一个整体进行匹配,例如

32.png

    -name "文件名称",不区分字母大小写

    -inum n      按inode号码超找

    -samefile name   相同inode号码超找

    -links n       链接数为n的文件

    -regex "pattern"  以pattern匹配整个文件路径字符串,而不仅仅是文件名称

(2)根据属主、属组查找

-user USERNAME

    查找属主为指定用户(UID)的文件

-group GRPNAME 

    查找属组为指定组(GID)的文件

-uid UserID

    查找属主为指定的UID号的文件

-gid GroupID

    查找属组为指定的GID号的文件

-nouser

    查找没有属主的文件

-nogroup    

    查找没有属组的文件

(3)根据文件类型查找

-type TYPE

    f:普通文件

    d:目录文件

    l:符号链接文件

    s:套接字文件

    b:块设备文件

    c:字符设备文件

    p:管道文件

(4)根据文件大小来查找

-size [文件大小]

常用单位:k,m,G

其中文件大小分为三种情况,可以将[0,+∞)的数轴分为三段,假设a正整数数字,可以将数轴分为三段,[0,a-1]、(a-1,a]、(a,+∞),在搜索时第一段可以用 -a 表示,第二段用 a 表示,第三段用 +a 表示

(5)根据时间戳来查找

    以天为单位

  -atime [时间段] 

  -mtime [时间段]

  -ctime [时间段] 

 其中时间段的划分与根据文件大小的划分相同

以分钟为单位

  -amin   -mmin   -cmin 


(6)根据权限查找

   -perm [/|-]MODE

   MODE:精确权限匹配

   /MODE:任何一类(u、g、o)对象的权限中只能以为匹配即可,是或的关系

   -MODE:每一类对象都必须同时又有指定权限,与关系0表示不关注

(7)处理动作

-print

    默认的处理动作,显示至屏幕

-ls

    类似于对查找到的文件执行"ls -l"命令

-delete

    删除查找到的文件

-fls file

    查找到的所有文件的长格式信息保存至指定文件中

-ok COMMAND {}\

    对查找到的每个文件执行由COMMAND指定的命令;对于每个文件执行命令之前,都会交互式的要求用户确认

(8)基于目录深度的查找 -maxdepth和-mindepth

    find命令在使用时会遍历所有的子目录,我们可以使用-maxdepth和-mindepth选项来限制find命令遍历目录的深度。

    大多数情况下,我们只需要在当前目录下进行查找,无需继续往下查找。对于这用情况,我们使用深度选项来限制find命令向下查找的深度。如果只允许find在当前目录中查找,深度可以设置为1;当需要向下两级是,深度设置为2;其他情况以此类推。

    可以用-maxdepth指定最大深度,使用-mindepth指定最小深度

PS:-maxdepth和-mindepth应该作为find的第三个参数出项。如果作为第四个参数或者之后的参数,就可能影响find的效率,因为它不得不进行一些不必要的检查。例如,如果-maxdepth作为第四个参数,-type作为第三个参数,find首先会找出符合-type的所有文件,然后在所有匹配的文件中再找出符合指定深度的那些。但是如果倒过来,目录深度作为第三个参数,-type作为第四个参数,那么find就能够在找到的所有符合指定深度的文件后,再检查这些文件类型,这才是最有效的搜索之道



  

原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/34585

赞 (0)
black_fishblack_fish
上一篇 2016-08-16 13:59
下一篇 2016-08-16 13:59

相关推荐

  • mysql-yum安装多实例

    1.安装包 yum install mariadb-server 2.创建文件 3 分别生成3306,3307,3308数库文件 4.复制主配置文件并分别修改端口路径 5.准备一个启动脚本并开启服务 /mysqldb/3307/mysqld start 6.用mysql -S 命令进入    

    2018-01-28
  • 查找与压缩

    文件查找 在文件系统上查找符合条件的文件;  文件查找:locate, find locate :非实时查找(数据库查找) find :实时查找 locate 1.查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db  2.依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务);管理需要员手动更新数据库…

    Linux干货 2016-08-22
  • 初窥门径shell脚本

    1.什么是shell脚本    首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。确切的说shell脚本就是一些命令的集合。 2.写脚本前的一些细节及建议   Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已…

    Linux干货 2016-08-15
  • selinux与systemd

    selinux :service enhanced linux 安全增强的Linux  软件的安全性 选择安全系数较高的系统提高现有系统的安全性  计算机的安全等级D  最低的安全级别,提供最少的安全防护,系统访问无限制。DOS   C  访问控制的权限,能够实现可控的安全防护,个人账户管理,审计和…

    Linux干货 2017-05-22
  • 网络接口bonding的设置、网卡别名的设置

    网络接口bonding的设置、网卡别名的设置 网络接口bonding的设置 1.bonding的原理 Bonding就是将多块网卡绑定同一IP 地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP 地址是不可能的。通过bonding ,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC 地址。 2.Bonding 的工作模式 …

    Linux干货 2016-09-05
  • SED基本用法和在文本中的使用

    sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e∶进行多项编辑,…

    Linux干货 2017-05-05