Linux文件查找之find命令詳解

文件查找

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

文件查找分為:

實時查找:遍歷所有文件進行條件匹配

非實時查找:根據所以查找

locate:

1、查詢系統上預建的文件索引數據庫

/var/lib/mlocate/mlocate.db

2、locate屬于非實時查找,依賴于事先構建的索引;

索引的構建是在系統較為空閑時自動進行(周期性任務);管理員手動更新數據庫(updatedb);

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

4、工作特點:

查找速度快;

模糊查找;

非實時查找

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

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

locate用法:

1、格式:

locate KEYWORD

2、有用的選項:  

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

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

3、示例

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

locate foo

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

locate -r ‘\.foo$’

find

find屬于實時查找,通過遍歷指定路徑下的文件系統層次結構完成文件查找

1、工作特點:

查找速度略慢

精確查找

實時查找

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

2、語法

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

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

查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件

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

查找條件

1、根據文件名和inode查找:

-name "文件名稱":支持使用glob

*, ?, [], [^]

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

-inumn 按inode號查找

-samefilename 相同inode號的文件

-links n 鏈接數為n的文件

-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

2、根據屬主屬組查找

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

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

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

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

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

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

3、根據文件類型查找 

-type TYPE:

f: 普通文件

d: 目錄文件

l: 符號鏈接文件

s:套接字文件

b: 塊設備文件

c: 字符設備文件

p: 管道文件

4、組合條件

與:-a

或:-o

非:-not, !

德·摩根定律:

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

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

或者

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

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

我們可以理解為(白色代表所求的)

2.png  

    not A的圖

3.png

    not B的圖

4.png

    not A or not B = not (A and B)

7.png

    not A and not B = not (A or B)

6.png

示例

查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

因為-111和-022是并且的關系,所以我們可以把(-111)+(-022)

8.png

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

1.png

5、根據文件大小來查找

-size [+|-]#UNIT

常用單位:k, M, G

#UNIT: (#-1, #],如:6k

-#UNIT:[0,#-1], 如:-6k

+#UNIT:(#,∞), 如:+6k

9.png

6、根據時間戳來查找文件

以“天”為單位;

-atime[+|-]#,

#: [#,#+1)

+#: [#+1,∞]

-#: [0,#)

-mtime

-ctime

以“分鐘”為單位:

-amin

-mmin

-cmin

10.png

7、根據權限查找

-perm [/|-]MODE

1)MODE: 精確權限匹配

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

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

4)0 表示不關注

示例:

find -perm 755會匹配權限模式恰好是755的文件

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

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

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

8、動作處理

-print:默認的處理動作,顯示至屏幕;
-ls:類似于對查找到的文件執行“ls -l”命令
-delete:刪除查找到的文件;
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;對于每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
{}: 用于引用查找到的文件名稱自身

find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令

有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題

find | xargsCOMMAND

需要注意的是,在執行或者過程中要只用ls長格式顯示,必須使用(),否者ls只會匹配最近一個條件

示例:

11.png

12.png

9.find示例

1、find -namesnow.png  搜索名為snow.png的文件

2、find -inamesnow.png 不分大小寫地搜索名為snow.png、Snow.png、SNOW.PNG等等的文件

3、find / -name *.txt    搜索以txt為后綴的所有文件

4、find /var –name *log* 搜索含有log為關鍵字的所有文件

5、find -user joe -groupjoe 搜索被用戶joe 以及組群joe所擁有的文件

6、find -user joe -not -group joe 搜索用戶joe,且該用戶不屬于joe組

7、find -user joe -o -user jane 搜索用戶joe或用戶jane

8、find -not\( -user joe -o -user jane\)  搜索用戶既不是joe并且也不是jance

9、find / -user joe -o -uid500 搜索搜索一個用戶名是joe或uid是500的用戶

10、find /tmp \( -not -user root -a -not -name 'fstab' \) –ls 找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件

11、find /tmp-not \( -user root -o -name 'fstab' \) –ls  ?排除目錄

12、find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print 在/etc目錄下,排除/etc/sane.d目錄,查找帶有conf后綴的文件,并加以顯示

13、find -name “*.conf” -exec cp {} {}.org \ 備份配置文件,添加.orig這個擴展名

14、find /tmp -ctime +3 -user joe -o krm{}\ 提示刪除存在時間超過3天以上的joe的臨時文件

15、find ~-perm-002 -exec chmod o-w {}\ 在你的主目錄中尋找可被其它用戶寫入的文件

16、find /data -type f -perm 644 -name *.sh -exec chmod 755 {} \ 在data目錄下查找權限為644、后綴是.sh的普通文件,將其的權限修改為755

17、find /home -type d -ls 在home的目錄下查找塊設備

小試牛刀

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

13.png

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

14.png

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

15.png

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

16.png

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

17.png

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

18.png

7、查找/etc/init.d/目錄下至少有一類用戶沒有執行權限的文件

19.png

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

20.png



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

(1)
xiaoqingxiaoqing
上一篇 2016-08-18
下一篇 2016-08-18

相關推薦

  • mariadb的主從復制、主主復制、半同步復制

    主從服務器的時間要同步,數據庫版本最好是一致的,以免造成函數處理、日志讀取、日志解析等發生異常。 以下三個主從復制的設置是獨立的。 注意防火墻和selinux的影響。 1、簡單主從復制的實現 (1)主服務器的配置 1)安裝mariadb-server [root@localhost ~]# yum -y install…

    Linux干貨 2016-11-21
  • MySQL-MMM安裝指南(Multi-Master Replication Manager for MySQL)

    最基本的MMM安裝必須至少需要2個數據庫服務器和一個監控服務器下面要配置的MySQL Cluster環境包含四臺數據庫服務器和一臺監控服務器,如下: function ip hostname server id monitoring host 192.168.0.10 mon – master 1 192.168.0.11 db1 1 maste…

    Linux干貨 2015-05-01
  • 文件屬性、文件管理命令及glob 博客作業—-21期網絡班第二周

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。    cp  mv  rm      命令格式:      cp [options] … SOURCE DEST    …

    Linux干貨 2016-07-16
  • 【招聘】北京/互聯網/運維工程師/7-15K/雙休,五險一金

    崗位職責:   1、負責服務器的規劃、調試優化、日常監控、故障處理、數據備份、日志分析等工作;   2、參與運維流程制定,確保任何突發情況都能高效響應;  3、負責服務器部署,對服務器構架和網絡進行優化和改進;  4、負責運維相關數據的收集、分析和總結;  5、負責技術運維相關的文檔、手冊…

    Linux干貨 2016-04-05
  • RAID簡介

    一,什么是raid? RAID(Redundant Arrays of Independent Disks)中文叫磁盤陣列。 簡單來講就是把很多的硬盤組織在一起來使用。        RAID技術分為幾種不同的等級,分別可以提供不同的速度,安全性和性價比。根據實際情況選擇適當的RAID級別可以滿足用戶對存儲系統可用性、…

    Linux干貨 2016-06-22

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 14:04

    文章對find命令的常見用法,有了一個完整的梳理。find命令在筆試中幾乎是必考的內容,而其中最難的是-perm選項,故他需要我們對摩根定律有一個深刻的理解,才能熟練掌握,希望下來能多多練習,熟練掌握。

欧美性久久久久