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.www58058.com/72835

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

相關推薦

  • 文本處理工具-習題

    1 、找出ifconfig 命令結果中本機的所有IPv4地址 [root@centos7 ~]# ifconfig |head -2 |tail-1 |cut -dn -f2 |cut -d" " -f2 2 、查出分區空間使用率的最大百分比值 [root@centos7 ~]# df |cut -c44-46 |sort -n|tail…

    Linux干貨 2016-08-15
  • 硬鏈接與軟鏈接的簡述

    我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但…

    Linux干貨 2016-10-20
  • 計算機簡介

    計算機的簡介 電子計算機(英語:computer),亦稱電腦,是一種利用「電子學」原理,根據一系列指令對數據進行處理的工具計算機種類繁多,但實際來看,計算機總體上是處理信息的工具。計算機在組成上形式不一,早期計算機的體積足有一間房屋的大小,而今天某些嵌入式計算機可能比一副「撲克牌」還小。當然,即使在今天依然有大量體積龐大的巨型計算機為特別的[科學]計算或面向…

    Linux干貨 2016-10-28
  • 馬哥教育網絡班19期+第九周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現;#!/bin/bash#declare -i noNum=0declare -i lNum=0for bashName in `cat /etc/passwd | cut -d: -f7` …

    Linux干貨 2016-06-29
  • 從需求和安全角度開始linux(一)-20151211

    突然想從需求和安全的角度來展開各種命令。因為我覺得linux中所有的常用命令基本都是需求和安全的產物。 當我打開一個CLI(command line interface)界面的linux操作系統時: 一、我希望能夠看到里面有什么,因此有了ls的命令。      ls – list&nbs…

    Linux干貨 2015-12-15
  • 第七周練習

    1、創建一個10G分區,并格式為ext4文件系統;   (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;   ~]# mke2fs -t ext4 -b 2048 -m 2 -L…

    Linux干貨 2016-12-10

評論列表(1條)

  • renjin
    renjin 2017-04-12 11:07

    建議把命令或代碼放入到插入程序代碼中去,還有標題格式需要注意

欧美性久久久久