linux文本查找工具之locate、find

   linux文本查找工具之locate、find

   
一、文件查找分为两类:
               1、非实时查找:locate
               2、实时查找:find

二、非实时查找:locate
        非实时查找:查找速度快、非精准查找、模糊查找
            原因在于它不搜索具体目录,而是依赖于一个数据库( /var/lib/mlocate/mlocate.db ),这个数据库中含有本地所有文件信息,这个数据库是周期性更新,而不是实时更新,
            所以查不到最新变动过的文件。所以使用locate查找文件时,先用updatedb,手动更新数据库。
      
        locate:用来查找文件或目录
        locate  [选项]  [参数]
            选项:
                -i 忽略大小写
                   例如:
                        [root@zq bin]# locate -i “.sh”
                        /etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
                        /etc/X11/xinit/xinitrc.d/localuser.sh
                        …

                -n N 显示匹配的指定的前N行
                   例如:
                     [root@zq bin]# locate -n 2 “
.sh”
                     /etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
                     /etc/X11/xinit/xinitrc.d/localuser.sh
                     [root@zq bin]#

                -r 使用正则表达式的方式搜索文件
                    例如:
                     [root@zq bin]# locate -r “.* \ .sh”
                     /etc/X11/xinit/xinitrc.d/00-start-message-bus.sh
                     /etc/X11/xinit/xinitrc.d/localuser.sh
                     /etc/X11/xinit/xinitrc.d/xdg-user-dirs.s
                     …

三、实时查找:find
        实时查找:精确查找、查找速度慢
            原因在于它是通过遍历指定路径下的文件系统完成文件查找,非常消耗计算机资源。
        
        find [选项]…[查找路径]   [查找条件]   [处理命令]
            1、查找路径:
                   默认为当前目录
           
            2、查找条件:
                   默认为指定路径下的所用文件
                   
                 (1)查找条件
                        -name “文件名” (支持文件名通配)

                          :任意长度的任意字符
                          ?:任意单个字符
                         []: 匹配指定范围内的任意一个字符
                         [^]:匹配指定范围外的任意一个字符
                         
               常用的字符集:
                         [:lower:]:所有小写字母
                         [:upper:]:所有大写字母
                         [:alpha:]:所有字母
                         [:digit:]:所有数字
                         [:alnum:]:所有数字和字母
                         [:space:]:表示空白字符
                         [:punct:]:表示所有标点符号

                    例如:
                        [root@zq ~]# find /etc -name “
[0-9][[:alpha:]]”
                        /etc/sysconfig/i18n
                        /etc/makedev.d/01v4l
                   -iname 文件名称忽略大小写
                       例如:
                          [root@zq bb]# find /root/bb -iname “a
                           /root/bb/A
                           /root/bb/a

                          
                   -inum n 根据inode来查找
                        例如:
                            [root@zq bb]# find /root/bb -inum 290716
                             /root/bb/a
                             [root@zq bb]# ls -i
                             290716 a  290717 A

                   -links n 根据链接数
                        例如:
                              [root@zq bb]# find /var/log -links 2 -ls
                               393172    4 drwx——   2 root     root         4096 Mar 16  2015 /var/log/ppp
                               403608    4 drwxr-xr-x   2 root     root         4096 Apr  8 10:09 /var/log/sa
                   
                   -uid UID:根据UID查找文件
                         例如:
                               [root@zq bb]# find /etc/rc.d -uid 0 -ls
                               130654    4 drwxr-xr-x  10 root     root         4096 Mar 22 18:51 /etc/rc.d
                               130663    4 drwxr-xr-x   2 root     root         4096 Mar 22 19:03 /etc/rc.d/rc4.d
                          
                   -gid GID:根据GID查找文件
                        例如:
                            [root@zq bb]# find /var/log -gid 0 -ls
                            393120    4 drwxr-xr-x  13 root     root         4096 Apr  8 10:10 /var/log
                            392026   52 -rw——-   1 root     root        46959 Apr  8 20:01 /var/log/cron

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

            (2) 组合条件查找
                    -a:与  同时满足条件
                    -o:或  满足其中一个条件就行
                    -not:!非 条件取反
         
                        例如:
                             [root@zq bb]# find /usr -not ( -user root -o -user bin -o -user shutdown ) -ls
                             -rwsr-xr-x   1 abrt     abrt        10296 May 12  2016 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache

            (3)根据文件类型查找:
                       文件类型:
                          – :普通文件
                          d :目录文件
                          b :块设备文件
                          c :字符设备文件
                          p :管道文件
                          l :符号连接文件
                          s :套接字文件
                   
                        例如:
                         [root@localhost ~]# find . -type d -ls
                         1048578    4 dr-xr-x—   5 root     root         4096 Apr  6 15:16 .
                         1068347    4 drwx——   3 root     root         4096 Apr  6 13:27 ./.dbus
                         1068348    4 drwx——   2 root     root         4096 Apr  6 13:27 ./.dbus/session-bus
                         1068350    4 drwx——   4 root     root         4096 Apr  6 13:44 ./.config
                         1068351    4 drwx——   3 root     root         4096 Apr  6 13:28 ./.config/ibus
                         …

              (4) 根据文件大小查找
                       -size [-|+]#   
                           常用单位:K M G
                       如:
                          5K :表示范围是 大于4K小于等于5K
                         -5K : 表示范围是 小于等于4K
                         +5K : 表示范围是 大于5K
                         
                     例如:
                       [root@localhost ~]# find /var/log -size +1k -ls
                       132569    4 drwxr-xr-x  20 root     root         4096 Apr  8 06:11 /var/log
                       265195    4 drwx——   3 root     root         4096 Apr  6 13:14 /var/log/libvirt
                       278911    4 drwx——   2 root     root         4096 Nov 11 21:18 /var/log/libvirt/qemu

               (5) 根据时间戳查找文件
                          
                      以’天’为单位
                          -atime [-|+]#  根据访问时间查找
                              如:
                               5 :表示时间范围是 5<= # <6
                              -5 : 表示时间范围是 #<5   5天以内的
                              +5 :表示时间范围是 #=>6
                          
                          -mtime :     根据修改时间查找
               
                          -ctime :     根据改变时间查找
            
                       例如:
                          [root@localhost ~]# find /var/log -mtime -7 -ls
                          132569    4 drwxr-xr-x  20 root     root         4096 Apr  8 06:11 /var/log
                          265195    4 drwx——   3 root     root         4096 Apr  6 13:14 /var/log/libvirt
                          148902    4 -rw——-   1 root     root          396 Apr  8 06:12 /var/log/maillog
                          265202    4 drwxr-xr-x   3 root     root         4096 Apr  6 13:13 /var/log/pluto
                          …
 
                       以“分钟”为单位
                          -amin   根据访问时间查找
                      
                          -mmin   根据修改时间查找

                          -cmin   根据改变时间查找

                  (6) 根据权限查找
                           
                           -perm [-|+] MODE
                                 
                                 MODE:与MODE精确匹配查找
                            例如:
                                [root@localhost ~]# find /var/log -perm 644 -ls
                                131127   24 -rw-r–r–   1 root     root        23592 Apr  6 13:28 /var/log/Xorg.9.log
                                131517    4 -rw-r–r–   1 root     root           80 Apr  8 06:12 /var/log/wpa_supplicant.log
                                131076   16 -rw-r–r–   1 root     root        14310 Apr  8 06:11 /var/log/boot.log
                                …

                               -MODE:必须包含全部的MODE权限才可以
                          
                            例如:
                                  [root@zq bb]# find /root/bb/* -perm -644 -ls
                                  290717    0 -rw-r–r–   1 root     root            0 Apr  8 19:59 /root/bb/A
                                  290718    0 -rw-r–r–   1 root     root            0 Apr  8 20:55 /root/bb/c
                                  290719    0 -rwxrw-rw-   1 root     root            0 Apr  8 20:55 /root/bb/d
   
                               +MODE: 只要有一个比如说属主 属组或者其他人有一个拥有MODE权限即可
    
                            例如:
                                 [root@zq bb]# find /root/bb/* -perm +644 -ls
                                 290716    0 -rw-r—–   1 root     root            0 Apr  8 19:59 /root/bb/a
                                 290717    0 -rw-r–r–   1 root     root            0 Apr  8 19:59 /root/bb/A
                                 290718    0 -rw-r–r–   1 root     root            0 Apr  8 20:55 /root/bb/c
                                 290719    0 -rwxrw-rw-   1 root     root            0 Apr  8 20:55 /root/bb/d
 
            3、 处理动作
                
                  -print:默认处理动作,显示到屏幕上
                  
                  -ls   :类似于ls -l
       
                  -delete:删除查找到的文件;只删除文件,不能删除非空目录

                 -fls /PATH/TO/SOMEFILE:查找到的文件长格式信息保存到指定文件中
                      
                      例如:
                          [root@zq bb]# find /root/bb/* -perm -644 -fls /tmp/findfile
                          [root@zq bb]# cat /tmp/findfile
                          290717    0 -rw-r–r–   1 root     root            0 Apr  8 19:59 /root/bb/A
                          290718    0 -rw-r–r–   1 root     root            0 Apr  8 20:55 /root/bb/c
                          290719    0 -rwxrw-rw-   1 root     root            0 Apr  8 20:55 /root/bb/d  
                 

                 -ok COMMAND {} \;对查找到的文件执行COMMAND命令,执行命令之前,跟用户进行交互确认。
                      
                      例如:
                         [root@zq bb]# find /root/bb/* -perm -644 -ok stat {} \;
                          < stat … /root/bb/A > ? yes
                               File: /root/bb/A
                               Size: 0             Blocks: 0          IO Block: 4096   regular empty file
                             Device: 802h/2050d    Inode: 290717      Links: 1
                              Access: (0644/-rw-r–r–)  Uid: (    0/    root)   Gid: (    0/    root)
                              Access: 2017-04-08 19:59:51.535982828 +0800
                              Modify: 2017-04-08 19:59:51.535982828 +0800
                              Change: 2017-04-08 19:59:51.535982828 +0800
                              …

                -exec COMMAND {} \; 对查找到的文件执行COMMAND命令,执行命令之前,不用跟用户进行交互确认。
                       
                      例如:
                          [root@zq bb]# find /root/bb/* -perm -644 -exec stat {} \;
                             File: `/root/bb/A’
                             Size: 0             Blocks: 0          IO Block: 4096   regular empty file
                           Device: 802h/2050d    Inode: 290717      Links: 1
                           Access: (0644/-rw-r–r–)  Uid: (    0/    root)   Gid: (    0/    root)
                           Access: 2017-04-08 19:59:51.535982828 +0800
                           Modify: 2017-04-08 19:59:51.535982828 +0800
                           Change: 2017-04-08 19:59:51.535982828 +0800
                           …
         工作环境常用:
                    工作环境中利用find查找文件,找到的文件很大(比如大于15T),然后对其做处理动作,很有可能造成进程中断而停止。
                    这时候我们可以利用xargs命令与find相结合来处理问题
             
                    xargs 将前面的find的查找结果分批次给后面的命令作为执行的参数。
                  
                例如:
                     [root@zq bb]#  find /var/log -name “*.log” | xargs ls -l
                     -rw——-. 1 root  root     5354 Mar 22 19:06 /var/log/anaconda.ifcfg.log
                     -rw——-. 1 root  root    22672 Mar 22 19:06 /var/log/anaconda.log
                     -rw——-. 1 root  root    47672 Mar 22 19:06 /var/log/anaconda.program.log
                     -rw——-. 1 root  root   250354 Mar 22 19:06 /var/log/anaconda.storage.log
                     -rw——-. 1 root  root   174890 Mar 22 19:06 /var/log/anaconda.yum.log
                     -rw——-. 1 root  root  3149433 Apr  8 21:20 /var/log/audit/audit.log

 

 
    
     

 
 
                            
                           

                       

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

(0)
zqzq
上一篇 2017-04-08
下一篇 2017-04-08

相关推荐

  • 组建RAID5重启系统,出现md127的解决办法

        我这里在组建RAID5之后重启了系统,当时/dev/md0变成了/dev/md127。出现这问题主要是我没有配置生成/etc/mdadm.conf文件,如果哪位伙伴出现类似我这种情况,而不是通过我这种方法解决的,希望能分享一下你的解决方法,谢谢。  先停止md127 [root@client3&nbs…

    Linux干货 2016-01-05
  • Linux 第六天: (08月03日) 练习和作业

    Linux 第六天: (08月03日) 练习和作业        当用户xiaoming对/testdir目录无执行权限时, 无法做哪些操作? 无法 ls -l 无法cd     当用户xiaoqiang对/testdir目录无读权限时, 无法做哪些操作? 无法查看目录文件列表   &nb…

    Linux干货 2016-08-08
  • 硬链接与软链接的联系与区别

    硬链接与软链接的联系与区别     文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。元数据中的inode才是…

    Linux干货 2016-10-20
  • 创建私有CA

      什么是CA   CA(Certificate Authority)证书颁发机构主要负责证书的颁发、管理以及归档和吊销。证书内包含了拥有证书者的姓名、地址、电子邮件帐号、公钥、证书有效期、发放证书的CA、CA的数字签名等信息。证书主要有三大功能:加密、签名、身份验证。 搭建私有CA 一、搭建CA服务器 1、生成密钥 ( ):表示此命令在子进程中运…

    Linux干货 2017-02-07
  • linux上的文件查找工具:locate和find

    一、非实时超找工具 locate     1、locate是查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db文件索引实在系统比较空闲的时候自动进行的,是系统的周期性任务,因为是周期性任务,所以有些短期的数据无法更新到数据库,如果需要马上应用,乣管理员手动更新数据库,用命令updatedb来执行。同时索引…

    Linux干货 2016-08-16
  • linux内核及系统启动流程

    Linux内核 内核概述 如图,最上面是用户空间(User Space),是用户程序执行的地方;用户空间之下是内核空间(Kernel Space),内核位于此。基于此,GUN C Library(glibc)提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制,因为内核空间和用户空间的应用程序使用的是不同的保护地址空间。用户空间的…

    Linux干货 2016-08-08

评论列表(1条)

  • renjin
    renjin 2017-04-12 11:07

    建议把命令或代码放入到插入程序代码中去,还有标题格式需要注意