溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux文件搜索工具--find、locate

發(fā)布時(shí)間:2020-05-18 12:01:18 來源:網(wǎng)絡(luò) 閱讀:367 作者:ldt160188718 欄目:數(shù)據(jù)庫

文件查找

                 在文件系統(tǒng)上查找符合條件的文件;

                 文件查找: locate, find

                非實(shí)時(shí)查找(數(shù)據(jù)庫查找): locate

                實(shí)時(shí)查找: find

      1. 非實(shí)時(shí)查找(數(shù)據(jù)庫查找): locate

                查詢系統(tǒng)上預(yù)建的文件索引數(shù)據(jù)庫  (基于此數(shù)據(jù)庫搜索)

                數(shù)據(jù)庫:  /var/lib/mlocate/mlocate.db

              依賴于事先構(gòu)建的索引

                索引的構(gòu)建是在系統(tǒng)較為空閑時(shí)自動(dòng)進(jìn)行(周期性任務(wù)),

                管理員手動(dòng)更新數(shù)據(jù)庫 :  updatedb

             (新建立的文件,需要更新數(shù)據(jù)庫以后才能搜索到,所以適合查找比較穩(wěn)的,

            不變的系統(tǒng)內(nèi)部配置文件)

              索引構(gòu)建過程需要遍歷整個(gè)根文件系統(tǒng),極消耗資源

              工作特點(diǎn):

                 查找速度快

                 模糊查找

                 非實(shí)時(shí)查找

                 搜索的是文件的全路徑,不僅僅是文件名

                 可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄

             locate命令

                locate KEYWORD

                常用的選項(xiàng)

                -i 執(zhí)行區(qū)分大小寫的搜索

                -n N 只列舉前N個(gè)匹配項(xiàng)目

                -r   使用正則表達(dá)式搜索

                

               eg:

                locate foo

                 搜索名稱或路徑中帶有“ foo”的文件

                locate -r ‘\.foo$’

                 使用Regex來搜索以“ .foo”結(jié)尾的文件

            

    2.實(shí)時(shí)文件查找工具: find

             find

                 實(shí)時(shí)查找工具,通過遍歷指定路徑完成文件查找;

                 工作特點(diǎn):

                     查找速度略慢

                     精確查找

                     實(shí)時(shí)查找

                     可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄

                        目錄搜索時(shí),自動(dòng)遞歸搜索

                 語法:

                 find [OPTION]… [查找路徑] [查找條件] [處理動(dòng)作]

                    查找路徑:指定具體目標(biāo)路徑;默認(rèn)為當(dāng)前目錄

                       查找條件:指定的查找標(biāo)準(zhǔn),可以文件名、大小、類型、

                    權(quán)限等標(biāo)準(zhǔn)進(jìn)行;默認(rèn)為找出指定路徑下的所有文件

                    處理動(dòng)作:對(duì)符合條件的文件做操作,默認(rèn)輸出至屏幕

                   (注意語法中的格式,應(yīng)使用正則表達(dá)式一致的語法格式)

            查找條件

                 根據(jù)文件名和inode查找:

                    -name "文件名稱"(精確搜索):支持使用glob

                   *, ?, [], [^]   支持通配      –>   注意需要加雙引號(hào)

                    -iname "文件名稱": 不區(qū)分字母大小寫

                         -inum n  按inode號(hào)查找

                    -samefile name        相同inode號(hào)的文件

                           -links n   鏈接數(shù)為n的文件

                    -regex "PATTERN":以PATTERN匹配整個(gè)文件路徑字

                    符串,而不僅僅是文件名稱

                

                 根據(jù)屬主、屬組查找:

                    -user USERNAME:  查找屬主為指定用戶(UID)的文件

                    (注意: 系統(tǒng)是按UID來搜索的)

                    -group GRPNAME:   查找屬組為指定組(GID)的文件

                    -uid UserID:  查找屬主為指定的UID號(hào)的文件

                    -gid GroupID:  查 找屬組為指定的GID號(hào)的文件

                    -nouser:      查找沒有屬主的文件

                    -nogroup: 查找沒有屬組的文件

                   (多個(gè)條件可以直接聯(lián)用, 代表與關(guān)系,即 -a, -a 可省略 )

                    eg   find / -nouser -nogroup )

                 根據(jù)文件類型查找:

                    -type TYPE:

                     f: 普通文件

                     d: 目錄文件

                     l: 符號(hào)鏈接文件

                     s:套接字文件

                     b: 塊設(shè)備文件

                     c: 字符設(shè)備文件

                     p: 管道文件

                  組合條件:

                    與: -a

                    或: -o

                    非: -not,   !

                    find / -name "abc.sh" -a -name "bsd"

                    find -not -name "adb"

                 德·摩根定律:

                    (非 P) 或 (非 Q) = 非(P 且 Q)

                    (非 P) 且 (非 Q) = 非(P 或 Q)

                           示例:

                    !A -a !B = !(A -o B)

                    !A -o !B = !(A -a B)

                    12

                find 示例

                     find -name snow.png

                         搜索名為snow.png的文件

                     find -iname snow.png

                                不分大小寫地搜索名為snow.png、Snow.png、

                        SNOW.PNG等等的文件

                     find / -name “*.txt”

                     find /var –name “*log*”

                     find -user joe -group joe

                     搜索被用戶joe 以及組群joe所擁有的文件

                         find -user joe -not -group joe

                         find -user joe -o -user jane

                          find -not  \( -user joe -o -user jane \)

                         find / -user joe -o -uid 500

                    找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件

                   find /tmp \( -not -user root -a -not -name 'f*' \) -ls

                   find /tmp -not \( -user root -o -name 'f*' \) –ls

                排除目錄  -prune  (不搜索該目錄)

                     示例:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴的文件

                    find /etc -path ‘/etc/sane.d’ -a -prune  -o -name “*.conf” -print

                    (忽略/root/bin 目錄, 不對(duì)其搜索,)

                根據(jù)文件大小來查找:

                    -size [+|-]#UNIT  (非精確大小)

                        常用單位: k, M, G

                        #UNIT: (#-1, #]

                        如: 6k 表示(5k,6k]

                        -#UNIT: [0,#-1]

                        如: -6k 表示[0,5k]

                        +#UNIT: (#,∞)

                        如: +6k 表示(6k,∞)

                根據(jù)時(shí)間戳:

                     以“天”為單位;

                      -atime [+|-]#,

                        #: [#,#+1)    [7,8)

                        +#: [#+1,∞]    [0,7)

                        -#: [0,#)           [8,+無窮)

                      -mtime

                      -ctime

                      以“分鐘”為單位:

                        -amin

                        -mmin

                        -cmin

                 根據(jù)權(quán)限查找:

                    -perm [/|-]MODE

                    MODE: 精確權(quán)限匹配

                    /MODE:任何一類(u,g,o)對(duì)象的權(quán)限中只要能一位 即可,或關(guān)系, + 從centos7開始

                            淘汰

                    -MODE:每一類對(duì)象都必須同時(shí)擁有指定權(quán)限,與關(guān)系

                    0 表示此位置上的權(quán)限不關(guān)注

                         find -perm 755 會(huì)匹配權(quán)限模式恰好是755的文件(精確匹配)

                         只要當(dāng)任意人有寫權(quán)限時(shí), find -perm +222就會(huì)匹配

                         只有當(dāng)每個(gè)人都有寫權(quán)限時(shí), find -perm -222才會(huì)匹配

                         只有當(dāng)其它人( other)有寫權(quán)限時(shí), find -perm -002才會(huì)匹配

                        (  +  :   或者關(guān)系

                            –  :   并且關(guān)系  )

                        find -perm -020   –>  只有g(shù)roup 上有寫權(quán)限的文件符合處理動(dòng)作

                     -print:默認(rèn)的處理動(dòng)作,顯示至屏幕;  (默認(rèn)即有輸出)

                     -ls:類似于對(duì)查找到的文件執(zhí)行“ ls -l”命令

                        注意前面命令是否需要括起來

                     -delete:刪除查找到的文件;

                     -fls file:查找到的所有文件的長格式信息保存至指定文件中

                     -ok COMMAND {} \; 對(duì)查找到的每個(gè)文件執(zhí)行由

                        COMMAND指定的命令; ( {} 代表搜索出的文件 )

                        對(duì)于每個(gè)文件執(zhí)行命令之前,都會(huì)交互式要求用戶確認(rèn)

                     -exec COMMAND {} \; 對(duì)查找到的每個(gè)文件執(zhí)行由 (有風(fēng)險(xiǎn))

                COMMAND指定的命令

                     {}: 用于引用查找到的文件名稱自身

                     find傳遞查找到的文件至后面指定的命令時(shí),查找到所有符合

                    條件的文件一次性傳遞給后面的命令

                     有些命令不能接受過多參數(shù),此時(shí)命令執(zhí)行可能會(huì)失敗,下

                    面方式可規(guī)避此問題

                

                find | xargs COMMAND

                    處理動(dòng)作

                        xargs -0(零) 換行

                    find示例

                         find -name “*.conf” -exec cp {} {}.org \;

                             備份配置文件,添加.orig這個(gè)擴(kuò)展名

                         find /tmp -ctime +3 -user joe -ok rm {} \;

                             提示刪除存在時(shí)間超過3天以上的joe的臨時(shí)文件

                         find ~ -perm -002 -exec chmod o-w {} \;

                             在你的主目錄中尋找可被其它用戶寫入的文件

                         find /data –type f -perm 644 -name “*.sh” –exec

                            chmod 755 {} \;

                         find /home –type d -ls

                練習(xí)

                 1、查找/var目錄下屬主為root,且屬組為mail的所有文件

                    find /var  -user root -group mail

                

                 2、查找/var目錄下不屬于root、 lp、 gdm的所有文件

                    find /var -not \(-user root -o -user lp -o -user gdm \)

                 3、查找/var目錄下最近一周內(nèi)其內(nèi)容修改過,同時(shí)屬主不為root,也不是postfix的文件

                    find /var -not \( -user root -o -user postfix \) -mtime -7

                    

                 4、查找當(dāng)前系統(tǒng)上沒有屬主或?qū)俳M,且最近一個(gè)周內(nèi)曾被訪問過的文件

                    find \( -nouser -o -group \) -atime -7

                

                 5、查找/etc目錄下大于1M且類型為普通文件的所有文件

                    find /etc -size +1M  -type f

                 6、查找/etc目錄下所有用戶都沒有寫權(quán)限的文件

                    find /etc -not -perm /222

                 8、查找/etc/init.d目錄下,所有用戶都有執(zhí)行權(quán)限,且其它

                用戶有寫權(quán)限的文件

                    find /etc/init.d -perm -113

                


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI