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

相关推荐

  • sed工具 vim编辑器

    sed工具:    用法:           sed [option]… 'script' inputfile…      常用选项:           &nbs…

    Linux干货 2016-08-12
  • Tomcat基于memcached会话共享

    安装两台memcache,基于tomcat做会话同步;(只对动态内容缓存,用于追踪用户会话) 前提:两个tomcat节点:172.16.100.7(tomcatA.magedu.com),172.16.100.8(tomcatB.magedu.com)两个memcached节点:172.16.100.9, 172.16.100.10一个负载均衡节点:172.…

    2017-05-25
  • IT基础设施工具—Puppet

    一、Puppet简介 Puppet是一款使用GPLV2X协议授权的开源管理配置工具,基于ruby语言开发的自动化系统配置工具,可以C/S模式或独立运行,支持对所有UNIX及类UNIX系统的配置管理,既可以通过客户端—服务器的方式运行,也可以独立运行。Puppet适用于服务器管的整个过程 ,比如初始安装、配置更新以及系统下线。puppet可以为系统管理员提供方…

    Linux干货 2017-11-26
  • 马哥教育网络版21班第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限 [root@localhost ~]# cp -rf /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&n…

    Linux干货 2016-08-05
  • 程序包管理rpm&yum&编译安装

    centos6.6程序包管理 二进制应用程序的组成部分: 二进制文件,库文件,配置文件和帮助文件 程序包管理器:rpm rpm包管理器的前端工具:yum 程序包之间存在依赖关系 rpm的命名方式: name_VERSION_release.arch.rpm     VERSION: major.minor.r…

    Linux干货 2016-07-07
  • bash编程之数组和字符串处理

    数组: 程序=指令+数据          指令:     数据:变量、文件 数组:存储过个元素的连续的内存空间; 变量:存储单个元素的内存空间; 数组名:整个数组只有一个名字; 数组索引:编号从0开始;   &nbsp…

    Linux干货 2016-08-24

评论列表(1条)

  • renjin
    renjin 2017-04-12 11:07

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