文件查找工具—find命令總結

描述:

  find命令用來在指定目錄下查找文件。任何位于參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進行顯示。

說明:

 工作特點:

 查找速度略慢; 精確查找;實時查找;可能只搜索用戶具備讀取和執行權限的目錄

語法格式:

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

  find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]

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

    查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;

           默認為找出指定路徑下的所有文件

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

    查找條件:

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

     -name "文件名稱":支持使用glob: *, ?, [], [^]

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

     -inum n 按inode號查找

     -samefile name 相同inode號的文件

     -links n 鏈接數為n的文件

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

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

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

示例:

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

[root@localhost ~]# find /var -user root -group mail -ls
402653684    0 drwxrwxr-x   2 root     mail     20 Aug 16 05:06 /var/spool/mai

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

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

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

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

示例:

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

[root@localhost ~]# find / \( -nouser -o -nogroup \) -atime -7 -ls

     根據文件類型查找: -type TYPE:

         f: 普通文件

         d: 目錄文件

         l: 符號鏈接文件

         s:套接字文件

         b: 塊設備文件

         c: 字符設備文件

         p: 管道文件

     組合條件:

        與: -a

        或: -o

        非: -not, !

     根據文件大小來查找: -size [+|-]#UNIT

       常用單位: k, M, G

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

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

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

wKiom1ey1rbgWnQUAABGUCMT2Hc591.png

示例:

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

[root@localhost ~]# find /etc -size +1M -type f -exec ls -lh {} \;
-rw-r--r--. 1 root root 2.0M Jul 26  2016 /etc/gconf/gconf.xml.defaults/%gconf-tree.xml

      根據時間戳查找:-atime [+|-]#

        以“天”為單位;

         -atime [+|-]#,

         #: [#,#+1)

         +#: [#+1,∞]

         -#: [0,#)

wKioL1ey1pmyAgsXAAA-Kk-3JOc965.png

         -mtime: 修改時間

         -ctime: 改變時間

      以“分鐘”為單位:

          -amin

          -mmin

          -cmin

示例:

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

[root@localhost ~]# find /var -mtime -7 -not -user root -not -user postfix -ls
406127752    0 -rw-rw----   1 user100  mail            0 Aug 12 12:16 /var/spool

         

      根據權限查找:-perm [/|-]MODE

      MODE: 精確權限匹配

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

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

      0 表示不關注

示例:

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

[root@localhost ~]# find /etc -not -perm -222 -type f -ls
1180775   24 -rw-r--r--   1 root     root  21214 May 11  2016  /etc/dnsmasq.conf

      處理動作

       -print:默認的處理動作,顯示至屏幕;

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

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

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

       -ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;

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

       -exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;

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

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

  find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命    令有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題:

  find | xargs COMMAND 處理動作

示例:

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

[root@localhost ~]# find /etc -size +1M -type f -exec ls -lh {} \;
-rw-r--r--. 1 root root 2.0M Jul 26  2016 /etc/gconf/gconf.xml.defaults/%gconf-tree.xml

德.摩根定律的總結及應用示例:

德.摩根發現命題邏輯中存在以下關系:

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

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

wKiom1eyu2ji8ObVAACPJkMAg6U000.jpg

用集合的概念來表述該關系:

兩個集合的交集的補集等于它們各自補集的并集

兩個集合的并集的補集等于它們各自補集的交集

u={1,2,3,4,5,6,7,8}

A={1,2,3,4}

B={3,4,5,6}

!A={5,6,7,8}

!B={1,2,7,8}

AUB={1,2,3,4,5,6,7,8}

A∩B={3,4}

驗證:

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

!(A ∩ B)= !A U !B

{1,2,5,6,7,8}={5,6,7,8}U{1,2,7,8}={1,2,5,6,7,8}

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

?。ˋ U B )=!A ∩ !B

{7,8}={5,6,7,8}∩{1,2,7,8}={7,8}

示例:

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

[root@localhost ~]# find /var -not -user root -not -user lp -not -user gdm -ls
524331    4 -rw-r--r--   1 rpcuser  rpcuser  5 Aug 24 13:31  /var/run/rpc.statd.pid
524312    4 drwx------   2 haldaemon haldaemon     4096 Oct 15  2014 /var/run/hald
[root@localhost ~]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls
524331    4 -rw-r--r--   1 rpcuser  rpcuser  5 Aug 24 13:31  /var/run/rpc.statd.pid
524312    4 drwx------   2 haldaemon haldaemon     4096 Oct 15  2014 /var/run/hald

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

[root@localhost ~]# find / \( -nouser -o -nogroup \) -atime -7 -ls

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

[root@localhost ~]# find /etc -not -perm -111 -type f -ls
1180775   24 -rw-r--r--   1 root     root  21214 May 11  2016  /etc/dnsmasq.conf


find 條件權限perm

根據文件的權限來查找文件,有三種形式: 

find  -perm  mode :精確權限匹配

find  -perm  /mode :任何一類用戶(u.g,o)權限中的任何一位(r,w,x)符合條件,

             即滿足9位權限之間存在“或”關系

find  -perm  mode :每一類用戶(u,g,o)權限中每一位(r,w,x)同時符合條件,

             即滿足9位權限之間存在“與”關系

0 表示不關注,對應的權限位上,如:640表示只要符合屬主具有讀和寫,屬組具有寫權限,其它人的權限位不關注即可

例如:644:rw-r–r–    755: rwxr-xr-x   750: rwxr-x–

示例:

[root@localhost test]# ll
-rw-r--r--. 1 user1 root 0 Aug 16 11:03 a
-rw-r--r--. 1 user2 root 0 Aug 16 11:03 b
-rw-r--r--. 1 root  root 0 Aug 16 11:03 c
-rw-r--r--. 1 root  root 0 Aug 16 11:03 d
drwxr-xr-x. 2 root  root 6 Aug 16 11:03 hello
drwxr-xr-x. 2 root  root 6 Aug 16 11:03 hi
[root@localhost test]# find ./ -perm 644    精確匹配
./a                            
./b
./c
./d
[root@localhost test]# find ./ -perm /640   權限位存在著“或”的關系
./
./a
./b
./c
./d
./hello
./hi
[root@localhost test]# chmod o-r a
[root@localhost test]# chmod 006 b
[root@localhost test]# chmod 750 hi
[root@localhost test]# ll
-rw-r-----. 1 user1 root 0 Aug 16 11:03 a
-------rw-. 1 user2 root 0 Aug 16 11:03 b
-rw-r--r--. 1 root  root 0 Aug 16 11:03 c
-rw-r--r--. 1 root  root 0 Aug 16 11:03 d
drwxr-xr-x. 2 root  root 6 Aug 16 11:03 hello
drwxr-x---. 2 root  root 6 Aug 16 11:03 hi
[root@localhost test]# find ./ -perm -644     權限之間存在“與”關系
./
./c
./d
./hello

作業

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

[root@localhost ~]# find /var -user root -group mail -ls
402653684    0 drwxrwxr-x   2 root     mail     20 Aug 16 05:06 /var/spool/mai

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

[root@localhost ~]# find /var -not -user root -not -user lp -not -user gdm -ls
524331    4 -rw-r--r--   1 rpcuser  rpcuser  5 Aug 24 13:31  /var/run/rpc.statd.pid
524312    4 drwx------   2 haldaemon haldaemon     4096 Oct 15  2014 /var/run/hald
[root@localhost ~]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls
524331    4 -rw-r--r--   1 rpcuser  rpcuser  5 Aug 24 13:31  /var/run/rpc.statd.pid
524312    4 drwx------   2 haldaemon haldaemon     4096 Oct 15  2014 /var/run/hald

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

[root@localhost ~]# find /var -mtime -7 -not -user root -not -user postfix -ls
406127752    0 -rw-rw----   1 user100  mail            0 Aug 12 12:16 /var/spool
[root@localhost ~]# find /var -mtime -7 -not \( -user root -o -user postfix \) -ls
406127752    0 -rw-rw----   1 user100  mail            0 Aug 12 12:16 /var/spool/mail/user100

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

[root@localhost ~]# find / \( -nouser -o -nogroup \) -atime -7 -ls

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

[root@localhost ~]# find /etc -size +1M -type f -exec ls -lh {} \;
-rw-r--r--. 1 root root 2.0M Jul 26  2016 /etc/gconf/gconf.xml.defaults/%gconf-tree.xml

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

[root@localhost ~]# find /etc -not -perm -222 -type f -ls
1180775   24 -rw-r--r--   1 root     root  21214 May 11  2016  /etc/dnsmasq.conf

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

[root@localhost ~]# find /etc -not -perm -111 -type f -ls
1180775   24 -rw-r--r--   1 root     root  21214 May 11  2016  /etc/dnsmasq.conf

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

[root@localhost ~]# find /etc/init.d -perm -113 -ls
1179741    0 lrwxrwxrwx   1 root  root 11 Jul 26 2016  /etc/init.d -> rc.d/init.d

總結:

1,重點和難點:組合測試、根據文件大小查找、 根據時間戳查找、根據權限查找、處理動作中的ok與exec兩種組合

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

(0)
pingskypingsky
上一篇 2016-08-18
下一篇 2016-08-18

相關推薦

  • read,locate ,find 的總結及相關聯系

    read 變量名 read 變量名1 [變量名2] < 文件名不支持管道read 變量名1 [變量名2] <<< “值1 [值2] …”使用read來把輸入值分配給一個或者多個shell變量     -p 指定要顯示的提示     # read -p…

    Linux干貨 2017-08-12
  • RAID功能介紹及其使用

    RAID功能介紹及其使用 獨立硬盤冗余陣列(RAID, Redundant Array of Independent Disks),舊稱廉價磁盤冗余陣列(Redundant Array of Inexpensive Disks),簡稱磁盤陣列。其基本思想就是把多個相對便宜的硬盤組合起來,成為一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬盤。根據…

    Linux干貨 2017-01-06
  • 磁盤管理

    磁盤管理磁盤管理 本章內容 ?磁盤結構 ?分區類型 ?管理分區 ?管理文件系統 ?掛載設備 ?管理虛擬內存 設備文件 ?I/O Ports: I/O設備地址 ?一切皆文件: open(), read(), write(), close() ?設備類型: 塊設備:block,存取單位“塊”,磁盤 字符設備:char,存取單位“字符”,鍵盤 ?設備文件:關聯至一…

    Linux干貨 2016-08-26
  • C語言結構體里的成員數組和指針

    單看這文章的標題,你可能會覺得好像沒什么意思。你先別下這個結論,相信這篇文章會對你理解C語言有幫助。這篇文章產生的背景是在微博上,看到@Laruence同學出了一個關于C語言的題,微博鏈接。微博截圖如下。我覺得好多人對這段代碼的理解還不夠深入,所以寫下了這篇文章。 為了方便你把代碼copy過去編譯和調試,我把代碼列在下面: final void&n…

    Linux干貨 2016-05-29
  • NFS實現共享wordpress

    實驗環境 192.168.68.134 wordpress站點 nfs-server 192.168.68.144 nfs-client   實驗要求 nfs server共享/var/www/html目錄 nfs clinet掛載nfs-server共享的目錄,部署wordpress   nfs server端 先部署wordpress…

    Linux干貨 2017-10-21
  • 為什么中國的網頁設計那么爛?

    Nick Johnson,一個有12年經驗的Web設計師在它的blog里寫下了“Why is Chinese Web Design So Bad”,新浪,人人,百度,阿里巴巴,騰訊榜上有名。其中的觀點相當的好,希望所有的中國人都讀一下。我不全文翻譯了,只是給大家看一些摘要。(保證不會像《環球時報》一樣) —————————— 作者2005年的夏天來到中國,他…

    Linux干貨 2016-07-11

評論列表(1條)

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

    文章層次結構清晰,對find的常用選項總結的也很詳解,find命令是筆試中的一個重要的考點,希望課后能多加練習,進行好總結和梳理。

欧美性久久久久