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 19:10
下一篇 2017-04-08 23:26

相關推薦

  • Linux Bash Shell練習

    Linux Bash Shell練習 1、寫一個腳本,完成以下功能: 假設某目錄(/etc/rc.d/rc3.d/)下分別有K開頭的文件和S開頭的文件若干 顯示所有以K開頭的文件的文件名,并且給其附加一個stop字符串 顯示所有以S開頭的文件的文件名,并且給其附加一個start字符串 分別統計S開頭和K開頭的文件各有多少 #!/bin/bash # for&…

    Linux干貨 2016-12-17
  • linux命令格式,獲取幫助及其目錄結構簡要理解

    我們都知道,一臺計算機要是沒通電,和一堆廢鐵沒什么區別。那么,通電開機進入系統后,會進入交互界面,等待用戶操作,人與計算機交互界面有兩種: GUI:圖形用戶接口。如我們平時使用的Windows ?,linux的X window,有KDE和GOME.   CLI:命令行接口,使用的SHELL類型有bash ,csh,tcshell,zshell等。 …

    2017-09-14
  • Week 1 計算機組成

    I. 引 Introduction     在學習計算機技術之前,了解計算機的組成是非常必要的。這不僅可以讓你對硬件有一個大概的了解,而且會讓你將來對基于硬件運行的軟件有一個更為透徹的理解。只有理解了計算機是如何協調它的部件來工作的才方能理解人們為何這樣設計操作系統和程序。 I. 計算機部件 The Essential…

    Linux干貨 2016-06-11
  • 3.用戶和組管理

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who root     tty1         2016-12-…

    Linux干貨 2017-07-16
  • nginx學習筆記

    深入理解Nginx 一、Nginx是什么? 二、為什么選擇Linux ? 三、Nginx生成的文件有哪些? 四、Nginx的配置詳解? 五、模塊功能詳解 六、虛擬主機配置詳解?                 一、Nginx是什么? Nginx(engine X)是一個高性能的H…

    Linux干貨 2017-03-15
  • 編譯安裝LAMP-centos7

    編譯安裝LAMP (centos7 基于模塊化) 編譯安裝所需版本 Httpd 2.4,PHP 5.4,MariaDB 5.5通用二進制格式(綠色安裝包) MAriDB5.5 綠色安裝 1、#mkdir lamp :創建一個文件夾,存放軟件的版本 2、從官網上下載httpd2.4 mariaDb 5.5 PHP 5.4到該文件夾下 3、# tar xvf m…

    Linux干貨 2017-05-17

評論列表(1條)

  • renjin
    renjin 2017-04-12 11:07

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

欧美性久久久久