Linux文件查找之locate、find详解

 locate命令详解

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库文件,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。使用updatedb更新数据库时会占用系统的资源,特别是对特别复杂的目录或要文件较多时,要进行更新数据时,可选择系统空闲的时间段进行。

 

查询系统上预建的文件索引数据库

/var/lib/mlocate/mlocate.db

依赖于事先构建的索引;

索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updatedb);

索引构建过程需要遍历整个根文件系统,极消耗资源;

工作特点:

查找速度快;

模糊查找;

非实时查找

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

可能只搜索用户具备读取和执行权限的目录,普通用户因为没有权限可能搜索不到root用户目录的文件

 

locate [OPTION]… [PATTERN]…

locate选项

-n, x只列举前x个匹配项目

-b, –basename 匹配唯一的路径名称的基本文件名  

-c, –count 只显示找到条目的号码  

-d, –database DBPATH 用 DBPATH 替代默认的数据库(/var/lib/mlocate/mlocate.db)  

-e, –existing 只显示当前存在的文件条目  

-L, –follow 当文件存在时跟随蔓延的符号链接 (默认)  

-h, –help 显示本帮助  

-i, –ignore-case 匹配模式时忽略大小写区别  

-l, –limit, -n LIMIT 限制为 LIMIT项目的输出 (或 计数)   

-m, –mmap 忽略向后兼容性  

-P, –nofollow, -H 当检查文件时不跟随蔓延的符号  

-0, –null 输出时以 NUL 分隔项目  

-S, –statistics 不搜索项目,显示有关每个已用数据库的统计信息  

-q, –quiet 不报告关于读取数据库的错误消息  

-r, –regexp REGEXP 搜索基本正则表达式 REGEXP 来代替模式  

–regex 模式是扩展正则表达式  

-s, –stdio 忽略向后兼容性  

-V, –version 显示版本信息  

-w, –wholename 匹配完整路径名 (默认) 

 

手动更新locate数据库

[root@localhost tmp]# ll /var/lib/mlocate/mlocate.db 
-rw-r-----. 1 root slocate 4349086 Aug 15 09:09 /var/lib/mlocate/mlocate.db
[root@localhost tmp]# updatedb
[root@localhost tmp]# ll /var/lib/mlocate/mlocate.db 
-rw-r-----. 1 root slocate 4354529 Aug 15 19:15 /var/lib/mlocate/mlocate.db

 

在当前系统上查找fstab文件

[root@localhost ~]# locate fstab
/etc/fstab
/etc/fstab.bak
/etc/selinux/targeted/modules/active/modules/updfstab.pp
/home/cyh/fstab.bak
/usr/lib/dracut/modules.d/95fstab-sys
/usr/lib/dracut/modules.d/95fstab-sys/module-setup.sh
/usr/lib/dracut/modules.d/95fstab-sys/mount-sys.sh
/usr/lib/systemd/system-generators/systemd-fstab-generator
/usr/share/augeas/lenses/dist/fstab.aug
/usr/share/augeas/lenses/dist/vfstab.aug
/usr/share/man/man5/fstab.5.gz
/usr/share/man/man8/systemd-fstab-generator.8.gz
/usr/share/vim/vim74/syntax/fstab.vim

 

搜索bin目录下的以“.sh”结尾的文件

[root@localhost ~]# locate bin/*.sh
/root/bin/1to100sum.sh
/root/bin/3.sh
/root/bin/3.sh1g5
/root/bin/3sum200.sh
/root/bin/AtoBsum.sh
/root/bin/Sum.sh
/root/bin/Te.sh

 

搜索/etc目录下所有以sh开头的文件

[root@localhost ~]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shadow.bak
/etc/shells

find命令详解

 

实时查找工具,通过遍历指定路径完成文件查找;

 

工作特点:

查找速度略慢

精确查找

实时查找

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

 

语法:

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

查找路径:指定具体目标路径;默认为当前目录

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

处理动作:对符合条件的文件做操作,默认输出至屏幕

 

查找条件


根据文件名和inode查找:

-name "文件名称":支持使用glob   *, ?, [], [^]

-iname "文件名称":不区分字母大小写

-inum n 按inode号查找

-samefile name 相同inode号的文件

-links n 链接数为n的文件

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

 

根据属主、属组查找:

-user USERNAME:查找属主为指定用户(UID)的文件

-group GRPNAME: 查找属组为指定组(GID)的文件

-uid UserID:查找属主为指定的UID号的文件

-gid GroupID:查找属组为指定的GID号的文件

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

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

 

根据文件类型查找:

-type TYPE:

f: 普通文件

d: 目录文件

l: 符号链接文件

s:套接字文件

b: 块设备文件

c: 字符设备文件

p: 管道文件

 

组合条件:

与: -a

或: -o

非: -not, !

德·摩根定律:

非(P 且 Q) = (非 P) 或 (非 Q)

非(P 或 Q) = (非 P) 且 (非 Q)

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

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

 

根据文件大小来查找:

-size [+|-]#UNIT

常用单位: k, M, G

#UNIT: (#-1, #],如: 6k

-#UNIT: [0,#-1], 如: -6k

+#UNIT: (#,∞), 如: +6k

 

根据时间戳:

以“天”为单位;

-atime [+|-]#,

#: [#,#+1)

+#: [#+1,∞]

-#: [0,#)

-mtime

-ctime

以“分钟”为单位:

-amin

-mmin

-cmin

 

根据权限查找:

-perm [/|-]MODE

MODE: 精确权限匹配

/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系, + 从centos7开始淘汰

-MODE:每一类对象都必须同时拥有指定权限,与关系

0 表示不关注

find -perm 755 会匹配权限模式恰好是755的文件

只要当任意人有写权限时, find -perm +222就会匹配

只有当每个人都有写权限时, find -perm -222才会匹配

只有当其它人( other)有写权限时, find -perm -002才会匹配

 

处理动作

-print:默认的处理动作,显示至屏幕;

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

-delete:删除查找到的文件;

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

-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令

对于每个文件执行命令之前,都会交互式要求用户确认

-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令

{}: 用于引用查找到的文件名称自身

find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题

find | xargs COMMAND

 

示例:

查找当前目录下面所有以“.txt”结尾的文件或目录

[root@localhost ~]# find -name "*.txt"
./.cache/tracker/db-version.txt
./.cache/tracker/db-locale.txt
./.cache/tracker/miner-applications-locale.txt
./.cache/tracker/last-crawl.txt
./.cache/tracker/first-index.txt
./.local/share/Trash/files/notepad.txt
./.local/share/Trash/files/Sublime.txt
./Desktop/Sublime.txt
./Desktop/windowstext.txt
./Desktop/linuxtext.txt
......

 

查找当前目录下面所有以字母u且后面跟一位数字,以“.sh”结尾的文件或目录

[root@localhost ~]# find -name "u[0-9].sh"
./u5.sh
./u1.sh
./u2.sh
./u8.sh
./u9.sh
./u4.sh

 

在当前目录下查找以f开头,后面至少跟一位数字,且以“.sh”结尾的文件

[root@localhost ~]# find -name "f[0-9]*.sh"
./bin/f1.sh
./bin/f2.sh
./f4d.sh
./f5t.sh

 

查找当前目录下面所有以“host”开头的文件或目录

[root@localhost ~]# find -name "host*"
./bin/hostping.sh
./etc2016-08-12/selinux/targeted/modules/active/modules/hostname.pp
./etc2016-08-12/host.conf
./etc2016-08-12/hosts
./etc2016-08-12/hosts.allow
./etc2016-08-12/hosts.deny
./etc2016-08-12/avahi/hosts
./etc2016-08-12/hostname
./etc2016-08-12/etc/selinux/targeted/modules/active/modules/hostname.pp
./etc2016-08-12/etc/host.conf
./etc2016-08-12/etc/hosts
./etc2016-08-12/etc/hosts.allow
./etc2016-08-12/etc/hosts.deny
./etc2016-08-12/etc/avahi/hosts
./etc2016-08-12/etc/hostname

 

查找Linux系统网卡配置文件

[root@localhost ~]# find /etc -name ifcfg-eno*
/etc/sysconfig/network-scripts/ifcfg-eno16777736
/etc/sysconfig/network-scripts/ifcfg-eno16777736.bak

 

查找/etc目录下面权限为755的文件或目录(/etc/ 或 /etc)

[root@localhost ~]# find /etc/ -perm 755 | more
/etc/
/etc/fonts
/etc/fonts/conf.d
/etc/X11
/etc/X11/fontpath.d
/etc/X11/applnk
/etc/X11/xorg.conf.d
/etc/X11/xinit
/etc/X11/xinit/xinitrc.d
/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
/etc/X11/xinit/xinitrc.d/localuser.sh
/etc/X11/xinit/xinitrc.d/50-xinput.sh
/etc/X11/xinit/xinitrc.d/xdg-user-dirs.sh
/etc/X11/xinit/xinitrc.d/zz-liveinst.sh
......

 

查找tmp目录下面所有者为root的文件或目录

[root@localhost ~]# find /tmp -user root -ls
   133    4 drwxrwxrwt  16 root     root         4096 Aug 15 18:06 /tmp
102476982    0 drwxrwxrwt   2 root     root           17 Aug  7 15:14 /tmp/.ICE-unix
105106828    0 srwxrwxrwx   1 root     root            0 Aug  7 15:14 /tmp/.ICE-unix/7118
798851    0 drwxrwxrwt   2 root     root            6 Aug  8 09:51 /tmp/.X11-unix
34830676    0 drwxrwxrwt   2 root     root            6 Jul 21 11:27 /tmp/.font-unix
67838375    0 drwxrwxrwt   2 root     root            6 Jul 21 11:27 /tmp/.Test-unix
102476984    0 drwxrwxrwt   2 root     root            6 Jul 21 11:27 /tmp/.XIM-unix
860203    4 -rwxr--r--   1 root     root          140 Aug 15 10:40 /tmp/per.sh
860212    0 -rwxr--r--   1 root     root            0 Aug 12 19:23 /tmp/1.sh
2494902    0 -rw-r--r--   1 root     root            0 Aug 12 19:23 /tmp/1.sh1
......

 

在/etc目录下查找更改时间在5天以内的所有文件和目录

[root@localhost ~]# find /etc/ -mtime -5 -ls
67149953   12 drwxr-xr-x 129 root     root         8192 Aug 15 16:47 /etc/
69909531    4 -rw-r--r--   1 root     root          129 Aug 15 16:47 /etc/resolv.conf
69909533    4 -rw-r--r--   1 root     root         1301 Aug 15 14:43 /etc/group
69909534    4 ----------   1 root     root         1031 Aug 15 14:43 /etc/gshadow
67811198    4 -rw-r--r--   1 root     root         1287 Aug 15 14:42 /etc/group-
69909532    4 -rw-r--r--   1 root     root         2934 Aug 15 14:43 /etc/passwd
67811196    4 ----------   1 root     root         1021 Aug 15 14:42 /etc/gshadow-
69909535    4 ----------   1 root     root         1857 Aug 15 14:43 /etc/shadow
33557926    4 drwxr-xr-x   6 root     root         4096 Aug 15 14:18 /etc/sysconfig
......

 

在/etc目录下查找更改时间在5天以内的普通文件

[root@localhost ~]# find /etc -mtime -5 -type f -ls
69909531    4 -rw-r--r--   1 root     root          129 Aug 15 16:47 /etc/resolv.conf
69909533    4 -rw-r--r--   1 root     root         1301 Aug 15 14:43 /etc/group
69909534    4 ----------   1 root     root         1031 Aug 15 14:43 /etc/gshadow
67811198    4 -rw-r--r--   1 root     root         1287 Aug 15 14:42 /etc/group-
69909532    4 -rw-r--r--   1 root     root         2934 Aug 15 14:43 /etc/passwd
67811196    4 ----------   1 root     root         1021 Aug 15 14:42 /etc/gshadow-
69909535    4 ----------   1 root     root         1857 Aug 15 14:43 /etc/shadow
67811575    4 -rw-r--r--   1 root     root         2893 Aug 15 14:42 /etc/passwd-
67811577    4 ----------   1 root     root         1829 Aug 15 14:42 /etc/shadow-
2494903    0 -rwxr-xrwx   1 root     root            0 Aug 13 14:37 /etc/rc.d/init.d/file2
36340025    4 -rw-r--r--   1 root     root           14 Aug 15 14:18 /etc/tuned/active_profile

 

查找属于root用户不属于root组的文件

[root@localhost ~]# find -user root -not -group root -ls
105121001    4 -rw-------   1 root     daemon         30 Jun 10  2014 ./etc2016-08-12/ppp/peers/wvdial
105121006    4 -rw-r-----   1 root     ssh_keys     1679 Jul 21 11:47 ./etc2016-08-12/ssh/ssh_host_rsa_key
105121008    4 -rw-r-----   1 root     ssh_keys      227 Jul 21 11:47 ./etc2016-08-12/ssh/ssh_host_ecdsa_key
105121010    4 -rw-r-----   1 root     ssh_keys      387 Jul 21 11:47 ./etc2016-08-12/ssh/ssh_host_ed25519_key
69760948    0 drwxr-x---   7 root     polkitd        93 Jul 21 11:27 ./etc2016-08-12/polkit-1/localauthority
36383394    4 -rw-r-----   1 root     chrony          9 Nov 24  2015 ./etc2016-08-12/chrony.keys
2198753    4 drwxr-xr-x   5 root     lp           4096 Aug  8 08:15 ./etc2016-08-12/cups
2198755    0 -rw-------   1 root     lp              0 Nov 20  2015 ./etc2016-08-12/cups/classes.conf
2198756    0 -rw-r--r--   1 root     lp              0 Nov 20  2015 ./etc2016-08-12/cups/client.conf
2198757    4 -rw-r-----   1 root     lp           3091 Jul 21 11:29 ./etc2016-08-12/cups/cups-files.conf
2198758    8 -rw-r-----   1 root     lp           4504 Nov 20  2015 ./etc2016-08-12/cups/cupsd.conf

提示删除存在时间超过3天以上的root的临时文件

[root@localhost ~]# find /tmp/ -ctime +3 -user root -ok rm {} \;
< rm ... /tmp/.ICE-unix/7118 > ?

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

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

相关推荐

  • 进程与周期任务

    STAT:进程状态: R:running S: interruptablesleeping D: uninterruptable sleeping T: stopped Z: zombie +: 前台进程 l: 多线程进程 L:内存分页并带锁 N:低优先级进程 <: 高优先级进程 s: session leader,会话(子进程)发起者 top栏位信息…

    Linux干货 2017-05-15
  • LNAMP 跨网段实现

    感谢Kason老师给我了知识!

    2017-12-31
  • 第十九周作业

    1、描述Tomcat的架构; 核心架构图: 架构简介: Server是管理Service接口的,是Tomcat的一个顶级容器。管理着多个Service; Service 是服务,管理着一个Container和多个Connector,Service的存在依赖于Server; Container : 一个或者多个Container 可以对应一个Connector…

    2017-06-23
  • 第一周学习总结

    俗话说,好记性不如烂笔头,在当今移动互联网横行的时代,烂笔头就是网络,而笔记本就是各种平台。 作为一个IT人,有人突然问你计算机是啥,你可能不会像学文科的人一样给他说,就是电脑啊。这时候就是凸显IT知识技能的时候了,那么我下面就给您慢慢的道来。 在1946年美籍匈牙利人冯·诺依曼首次提出了自己的计算机体系理论,简称冯·诺依曼体系,主要是说计算机由五大基本部件…

    2017-12-14
  • vim的使用说明

    vim的使用说明 vim是一款功能丰富而强大的文本编辑器,vim是从 vi 发展出来的一个文本编辑器。其代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛的使用。 vim的使用非常方便,使用方法为:vim [options] [file ..] 1、vim可以对指定文件进行编辑,也可以直接启动vim编辑器进行编辑,对于打开指定文件编辑时可以加…

    Linux干货 2016-08-12
  • linux软链接与硬链接的区别

    硬链接:相于当给文件增加了一个新名 在添加链接时会增加链接数,其inode结点数不会增加 支持绝对路径与相对路径 硬链接不能对目录来创建 不能跨分区来创建链接 硬链接链接到文件被删除时,依旧可以通过链接文件来访问被删文件的数据 软链接:可以支持对目录来创建链接 (注,当你用rm -rf 删除目录的时候,目录不会删除,但目录中的内容会被删除,并且会删除源文件)…

    Linux干货 2016-10-02

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 10:27

    对于文件查找,我们用的最多的工具是find命令,这也是笔试中必考的内容,希望能多加练习,熟练掌握。