Linux之Find命令詳解

Linux系統(tǒng)「文件查找」

Linux系統(tǒng)文件中常用屬性為以下內(nèi)容:名稱,大小,權(quán)限,屬主,屬組,修改時(shí)間,訪問時(shí)間等,在龐大的系統(tǒng)中,需要在prompt中查詢文件,需要借助其查找工具實(shí)現(xiàn),以此可以查詢相同或要求指定屬性的文件,Centos及EHLE類系統(tǒng)實(shí)現(xiàn)查詢工具有:Locate、find工具。

locate工具

`locate` 
    synopsis: locate [option]…PATTERN….
    options:
        -b --basename: 只匹配路徑的基名
        -c --count: 統(tǒng)計(jì)匹配條件的數(shù)量
        -r --regexp:支持正則表達(dá)式方式查詢

locate工作特性:

優(yōu)點(diǎn)####

  1. 查詢速度快,基于索引表查詢,索引表時(shí)系統(tǒng)計(jì)劃或手動(dòng)使用updatedb命令建立
  2. 不占用系統(tǒng)資源

缺點(diǎn)####

  1. 非實(shí)時(shí)查詢
  2. 模糊查詢
  3. 查詢的名稱匹配路徑名稱
  4. 索引表建立非常耗用系統(tǒng)資源

find工具

一、工作特點(diǎn)

優(yōu)點(diǎn)###

  1. 實(shí)時(shí)查找
  2. 準(zhǔn)確查找,遍歷整個(gè)目錄下的所有文件
  3. 可以對(duì)查詢到的文件進(jìn)行指定動(dòng)作,即查看,刪除,移動(dòng)等操作.

缺點(diǎn)####

  1. 查詢速度略慢

find命令使用方法

`find` - search for files in a directory hierarhy
    sysnopsis: find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

查詢條件

查詢條件由選項(xiàng)及測(cè)試條件組成:
【 測(cè)試條件 】
一、以文件名查找
  1. -name pattern : 以文件名查找
  2. -iname pattern: 不區(qū)分文件名的大小寫,只支持glob風(fēng)格的查找方式:*,?,[],[^]
  3. -regex pattern: 基于正則表達(dá)式查找文件,精確匹配文件名
二、以文件從屬關(guān)系查找
  1. -user USERNAME : 以用戶名查找
  2. -group GROUPNAME : 以組名查找
  3. -uid UID :以UID號(hào)查找
  4. -gid GID :以GID查找
  5. -nouser : 查找沒有屬主的文件
  6. -nogroup : 查找沒有屬組的文件
三、以文件類型查找
  1. -type TYPE : 以文件類型查找
    1. f : 普通文件
    2. d : 目錄文件
    3. b : 塊設(shè)備文件
    4. c : 字符設(shè)備文件
    5. l : 連接文件
    6. s : 套接字文件
    7. p : 管道文件
四、根據(jù)文件大小查找
  1. -size [+|-]SIZE : 以文件大小查詢,大小包含K,M,G的單位
    1. -size 5M : 精確查找大小為5M的文件,大小上面浮動(dòng)稍微有偏差
    2. -size -5M : 查詢大小小于5M的文件
    3. -size +5M : 查詢大小大于5M的文件
五、根據(jù)時(shí)間查找
  1. -atime [+|-]TIME : 以訪問時(shí)間(天)查找

  2. -mtime [+|-]TIME : 以數(shù)據(jù)修改時(shí)間(天)查找

  3. -ctime [+|-]TIME : 以元數(shù)據(jù)修改時(shí)間(天)查找

  4. -amin [+|-]TIME : 以訪問時(shí)間(分鐘)查找

  5. -mmin [+|-]TIME : 以數(shù)據(jù)修改時(shí)間(分鐘)查找

  6. -cmin [+|-]TIME : 以元數(shù)據(jù)修改時(shí)間(分鐘)查找

  7. -newer FILE : 以FILE文件為條件,判斷比它新的文件

    • 7 : 準(zhǔn)確時(shí)間,7表示剛好7(天|分鐘)起始位置
    • +7: 7(天|分鐘)以前的
    • -7: 7(天|分鐘)以內(nèi)的
六、根據(jù)權(quán)限查找
  1. -perm MODE : 精確權(quán)限查找
    • find . -perm 644
  2. -perm /MODE : 任何一類用戶(u,g,o)中的任何一位(r,w,x)符合條件即滿足,理解為或關(guān)系
    • find . -perm /222 : 查找至少有一個(gè)類用戶有寫權(quán)限
    • find . -perm /666 : 查找至少有一個(gè)類用戶有讀寫權(quán)限
    • find . -perm /001 :查找其他用戶有執(zhí)行權(quán)限
  3. -perm -MODE : 每一類用戶(u,g,o)的權(quán)限中的每一位(r,w,x)同時(shí)符合條件即滿足,理解為與關(guān)系
    • find . -perm -222 : 查找三類用戶都有寫權(quán)限
    • find . -not -perm -222 :至少有一類用戶沒有寫權(quán)限
七、 組合條件測(cè)試
  1. : -a
    • 默認(rèn)組合邏輯,可以加-a,也可以取消,例:find . -type f -a -user mariadb,兩個(gè)條件同時(shí)滿足
  2. : -o
    • 可以加-o參數(shù),例:find . -type f -o -nouser ,兩個(gè)條件只滿足一個(gè)即可
  3. : -not 或者 !表示
    • find . -not -type f,不是普通文件
    • find . ! -type f ,同上
八、處理動(dòng)作
  1. -print : 默認(rèn)為打印,不需要添加,輸出入屏幕
  2. -ls : 以ls長(zhǎng)文件的格式形式輸出
  3. -delete : 刪除查找到的文件
  4. -fls /PATH/TO/SOMEFILE :把查詢到的文件以ls詳細(xì)信息格式保存到SOMEFILE文件中
  5. -ok COMMAND {} \; : 查找到的文件傳遞給COMMAND命令,提每步都給用戶提示確認(rèn)操作
  6. -exec COMMAND {} \; : 查找到的文件傳遞給COMMAND命令,直接修改完成,不給用戶確認(rèn)
注意:find將查找到的文件路徑一次性傳遞給后面的命令,但有很多的命令不能接受過長(zhǎng)的參數(shù),導(dǎo)致命令的執(zhí)行失敗,使用如下方式可避免此錯(cuò)誤的發(fā)生:

find /etc -type f | xargs -i COMMAND : -i參數(shù)是由find的結(jié)果傳給xargs命令后,由-i指定結(jié)果代替符

    find /etc -type f | xargs -i cp {} /tmp : -i 指定代替符為{}

選項(xiàng)

一、指定查找目錄范圍
  1. -maxdepth NUM : 指定最多搜索目錄層級(jí)到NUM層
  2. -mindepth NUM : 指定最少搜索目錄NUM層級(jí)
二、查找空文件
  1. -empty : 查詢內(nèi)容為空的文件
    • find ./ -empty : 查找當(dāng)前目錄下的所有空文件
三、排除符號(hào)連接
  1. -follow : 排除符號(hào)連接

Find與xagrs的命令結(jié)合

Usage:

find /etc -type f | xargs -i cp {} /tmp/

    -i : 由xargs接收的參數(shù),由-i聲名由后一個(gè)命令{}代替

==============

示例
  1. 找出/tmp目錄下屬主為非root,且文件名包含fstab字符串的文件
    • find /tmp -not -user root -a -name *fstab*
  2. 找出/tmp目錄下文件名中不包含fstab字符串的文件
    • find /tmp -not -name *fstab*
  3. 找出/tmp目錄下屬主為非root,而且文件名不包含fstab字符串的文件
    • find /tmp -not -user root -a -not -name *fstab*
    • find /tmp -not \(-user root -o -name *fstab*\)
  4. 至少有一周沒有訪問過的文件
    • find /etc -atime +7 -ls
  5. 24小時(shí)內(nèi)修改過的文件
    • find /etc -mtime -1 -ls
  6. 查找 /var目錄下屬主為root,且屬組為mail的所有文件或目錄
    • find /var/ -user root -group mail
  7. 查找/usr目錄下不屬于root,bin,或者h(yuǎn)adoop的所有文件或目錄,用兩種方法
    • find ./ -not -user bin -not -user user3 -not -user user4
    • find ./ -not \( -user bin -o -user user3 -o -user user4 \)
  8. 查找/etc目錄下最近一周其內(nèi)容修改過, 且屬主不是root用戶也不是hadoop用戶的文件或目錄
    • find /etc -mtime -7 -not -user root -not -user hadoop
  9. 查找當(dāng)前系統(tǒng)上沒有屬主或?qū)俳M,且最近一周內(nèi)曾被訪問過的文件或目錄
    • find / -atime -7 -nouser -o -nogroup
  10. 查找/etc目錄下大于1M且類型為普通文件的所有文件
    • find /etc/ -size +1M -type f -ls
  11. 查找/etc目錄下所有用戶都沒有寫權(quán)限的文件
    • find /etc/ -type f -not -perm /222 -ls
  12. 查找/etc目錄至少有一類用戶沒有執(zhí)行權(quán)限的文件
    • find /etc/ -not -perm -111 -ls
  13. 查找/etc/init.d目錄下,所有用戶都有執(zhí)行權(quán)限,且其它用戶有寫權(quán)限的所有文件
    • find /etc/ -perm -111 -perm -002
    • find /etc/ -perm -113

摩根定律:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • find命令是用于實(shí)現(xiàn)精確查找,實(shí)時(shí)查找指定目錄下面的文件。在工作中常用。優(yōu)點(diǎn)是:實(shí)時(shí),精確。缺點(diǎn)是:比較占用系統(tǒng)...
    dxldeng閱讀 738評(píng)論 0 1
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 99,558評(píng)論 9 467
  • (1)文件查找作用:在文件系統(tǒng)上查找符合條件的文件 ?文件查找:locate, find 非實(shí)時(shí)查找(數(shù)據(jù)庫(kù)查找)...
    楠人幫閱讀 475評(píng)論 0 0
  • 作為一枚手殘黨,能這樣已經(jīng)實(shí)屬不易了。
    又欠檸枝閱讀 244評(píng)論 2 3
  • 我們常說的投資,就是指貨幣轉(zhuǎn)化為資本的過程。也就是把現(xiàn)有的資金投入到某種商品,期待在未來取得更大的回報(bào)或收益。那么...
    天寶慧眼tbvv558閱讀 221評(píng)論 0 1