文件搜索工具—— find locate

       文件查找

                ? 在文件系統上查找符合條件的文件;

                ? 文件查找: locate, find

                非實時查找(數據庫查找): locate

                實時查找: find

      1. 非實時查找(數據庫查找): locate

                查詢系統上預建的文件索引數據庫  (基于此數據庫搜索)

                數據庫:  /var/lib/mlocate/mlocate.db

             ? 依賴于事先構建的索引

                索引的構建是在系統較為空閑時自動進行(周期性任務),

                管理員手動更新數據庫 :  updatedb

                (新建立的文件,需要更新數據庫以后才能搜索到,所以適合查找比較穩的,不變的系統內部配置      

                   文件)

             ? 索引構建過程需要遍歷整個根文件系統,極消耗資源

             ? 工作特點:

                ? 查找速度快

                ? 模糊查找

                ? 非實時查找

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

                ? 可能只搜索用戶具備讀取和執行權限的目錄

             locate命令

                locate KEYWORD

                常用的選項

                -i 執行區分大小寫的搜索

                -n N 只列舉前N個匹配項目

                -r   使用正則表達式搜索

                

               eg:

                locate foo

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

                locate -r ‘\.foo$’

                ? 使用Regex來搜索以“ .foo”結尾的文件

            

    2.實時文件查找工具: find

             find

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

                ? 工作特點:

                    ? 查找速度略慢

                    ? 精確查找

                    ? 實時查找

                    ? 可能只搜索用戶具備讀取和執行權限的目錄

                        目錄搜索時,自動遞歸搜索

                ? 語法:

                ? find [OPTION]… [查找路徑] [查找條件] [處理動作]

                    查找路徑:指定具體目標路徑;默認為當前目錄

                    查找條件:指定的查找標準,可以文件名、大小、類型、

                    權限等標準進行;默認為找出指定路徑下的所有文件

                    處理動作:對符合條件的文件做操作,默認輸出至屏幕

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

            查找條件

                ? 根據文件名和inode查找:

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

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

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

                    -inum n                    按inode號查找

                    -samefile name        相同inode號的文件

                    -links n                     鏈接數為n的文件

                    -regex "PATTERN":以PATTERN匹配整個文件路徑字

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

                ? 根據屬主、屬組查找:

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

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

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

                    -uid UserID:            查找屬主為指定的UID號的文件

                    -gid GroupID:         查 找屬組為指定的GID號的文件

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

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

                    (多個條件可以直接聯用, 代表  與  關系,即 -a, -a 可省略 )

                    eg   find / -nouser -nogroup )

                ? 根據文件類型查找:

                    -type TYPE:

                    ? f: 普通文件

                    ? d: 目錄文件

                    ? l: 符號鏈接文件

                    ? s:套接字文件

                    ? b: 塊設備文件

                    ? c: 字符設備文件

                    ? 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 目錄, 不對其搜索,)

               ? 根據文件大小來查找:

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

                        常用單位: k, M, G

                        #UNIT: (#-1, #]

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

                        -#UNIT: [0,#-1]

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

                        +#UNIT: (#,∞)

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

                根據時間戳:

                     以“天”為單位;

                      -atime [+|-]#,

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

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

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

                      -mtime

                      -ctime

                      以“分鐘”為單位:

                        -amin

                        -mmin

                        -cmin

                ? 根據權限查找:

                    -perm [/|-]MODE

                    MODE: 精確權限匹配

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

                            淘汰

                    -MODE:每一類對象都必須同時擁有指定權限,與關系

                    0 表示此位置上的權限不關注

                        ? find -perm 755 會匹配權限模式恰好是755的文件(精確匹配)

                        ? 只要當任意人有寫權限時, find -perm +222就會匹配

                        ? 只有當每個人都有寫權限時, find -perm -222才會匹配

                        ? 只有當其它人( other)有寫權限時, find -perm -002才會匹配

                        (  +  :   或者關系

                            –  :   并且關系  )

                        find -perm -020   –>  只有group 上有寫權限的文件符合處理動作

                    ? -print:默認的處理動作,顯示至屏幕;  (默認即有輸出)

                    ? -ls:類似于對查找到的文件執行“ ls -l”命令

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

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

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

                    ? -ok COMMAND {} \; 對查找到的每個文件執行由

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

                        對于每個文件執行命令之前,都會交互式要求用戶確認

                    ? -exec COMMAND {} \; 對查找到的每個文件執行由 (有風險)

                COMMAND指定的命令

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

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

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

                    ? 有些命令不能接受過多參數,此時命令執行可能會失敗,下

                    面方式可規避此問題

                

                find | xargs COMMAND

                    處理動作

                        xargs -0(零) 換行

                    find示例

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

                            ? 備份配置文件,添加.orig這個擴展名

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

                            ? 提示刪除存在時間超過3天以上的joe的臨時文件

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

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

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

                            chmod 755 {} \;

                        ? find /home –type d -ls

                練習

                ? 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目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

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

                    

                ? 4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

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

                

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

                    find /etc -size +1M  -type f

                ? 6、查找/etc目錄下所有用戶都沒有寫權限的文件

                    find /etc -not -perm /222

                ? 8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它

                用戶有寫權限的文件

                    find /etc/init.d -perm -113

                

原創文章,作者:ldt195175108,如若轉載,請注明出處:http://www.www58058.com/36357

(0)
ldt195175108ldt195175108
上一篇 2016-08-22
下一篇 2016-08-22

相關推薦

  • 重定向和管道

    重定向和管道 今天一起來學習一下重定向的一些相關命令及用法: 我們都知道程序=指令+數據 ,那么我們的數據的輸入(Input)和輸出(Output)是如何實現的呢?!跟小編君一起來看一下吧: 本博文小編君分成了四部分:1.重定向的講解 2.管道符的講解 3.涉及到的一些其他命令 4.練習題 一:重定向 重定向的本質是改變文件的默認位置,即換個地方存儲數據。 …

    2017-08-04
  • MariaDB日志

    MariaDB日志 查詢日志:query log; 慢查詢日志:slow query log 查詢時長超出指定界限。 錯誤日志:error log 二進制日志:binary log;此中存儲要發生改變或潛在發生改變的語句。 中繼日志:reley log 事務日志:transaction log 1、查詢日志 記錄查詢語句,日志存儲位置:一般不開啟。 文件:f…

    Linux干貨 2016-11-20
  • 22期第8周課堂練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。     2、IP地址的分類有哪些?子網掩碼的表示形式及其作用   A類:第一段為網絡號,后三段為主機號            網絡號0 000 0000 – 0 111 1111…

    Linux干貨 2016-10-09
  • 計算機基礎知識(第一天)

    一、計算機的硬件組成         馮諾依曼體系結構:             CPU、存儲器、輸入設備、輸出設備       &nbsp…

    Linux干貨 2016-07-26
  • N25 the second week

    1.文件管理命令 1.1.cat concatenate files and print on the standard output # 正序打印文件 cat [OPTION]… [FILE]… # 常用參數 -n 編號顯示每行 -E 顯示每行的結束符 1.2.tac concatenat…

    Linux干貨 2016-12-19
  • 如何在微軟云上搭建mysql主從

    大家好: 今天我分享下在生產環境的微軟云服務器上如何搭建mysql主從: 環境如下圖: 我把cnux06-testing設為Mysql主服務器,暫時沒需求的cnux04-web1db2設為Mysql從服務器 1–首先要在master上開啟binlog日志功能并使主從庫中的 server-id保持不同 操作步驟如下: A: 先查看mysql的主目錄…

    Linux干貨 2017-02-14
欧美性久久久久