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

相关推荐

  • linux 3.26 第一课

    setup app

    2018-03-26
  • 基础指令使用篇 Linux版

    回显,回声 echo echo hello > /dve/pts/1 打开图形界面 init 5   关闭图形界面 init 3 ctrl+alt+F1-6字符,F7图形界面 chvt 改变虚拟终端 chvt +数字 startx  图形的软件打开 poweroff centOS 6.8与7.2都正常关闭断电 hostname 显示…

    系统运维 2016-08-04
  • 马哥教育网络班22期+第一周课程练习

    计算机的组成及其功能 计算机主要由五大部分组成:控制器、运算器、存储器、输入设备、输出设备,即CPU(控制器、运算器)、内存、I/O(输入/输出设备)。 控制器 是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器 对数据进行各种算术运算和逻辑运算,即对数据…

    Linux干货 2016-08-15
  • OSI模型与TCP/IP协议栈

         OSI模型:     使用OSI模型的意义:      简化教学     加快发展速度     确保技术的互操作性     简化模块化设计  &nbs…

    2017-08-20
  • Centos不重启添加新硬盘

     显示当前磁盘分区: [root@centos7 ~]# fdisk -l</p>< p>    Disk /dev/sda: 32.2 GB, 32212254720 bytes, 6…

    Linux干货 2016-03-27
  • corosync + pacemaker搭建高可用mysql

    一、实验图     二、环境准备  1)确保时间同步 [root@SQL1 ~]# crontab -e  */5 * * * * /usr/sbin/ntpdate 172.16.2.15 [root@SQL2 ~]#…

    Linux干货 2015-06-30

评论列表(1条)

  • renjin
    renjin 2017-04-12 11:07

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