文件查找工具—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 10:09
下一篇 2016-08-18 10:09

相關推薦

  • ?學會用各種姿勢備份MySQL數據庫

                學會用各種姿勢備份MySQL數據庫 前言 為什么需要備份數據? 數據的備份類型 MySQL備份數據的方式 備份需要考慮的問題 設計合適的備份策略 實戰演練 使用cp進行備份 使用mysqldump+復制BINARY …

    Linux干貨 2016-04-27
  • 搜索引擎的檢索模型-查詢與文檔的相關度計算

    1. 檢索模型概述       搜索結果排序時搜索引擎最核心的部分,很大程度度上決定了搜索引擎的質量好壞及用戶滿意度。實際搜索結果排序的因子有很多,但最主要的兩個因素是用戶查詢和網頁內容的相關度,以及網頁鏈接情況。這里我們主要總結網頁內容和用戶查詢相關的內容。     &nbsp…

    2015-12-10
  • 初識linux:計算機的組成及功能

    一、描述計算機的組成及功能。 由馮諾伊曼提出計算機體系結構(5大部件)控制器(Controller):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。 (cpu由控…

    2017-12-03
  • VMware虛擬機設置網絡(包含簡單安裝)

    1.下載VMware虛擬機 2.創建一個虛擬機,選擇下載好的linux系統,我這里選擇的是CentOS版本,之后一直按著步驟設置一般都選擇默認就好                               &…

    2017-09-02
  • Hadoop實戰實例

     Hadoop 是Google MapReduce的一個Java實現。MapReduce是一種簡化的分布式編程模式,讓程序自動分布到一個由普通機器組成的超大集群上并發執行。就如同java程序員可以不考慮內存泄露一樣, MapReduce的run-time系統會解決輸入數據的分布細節,跨越機器集群的程序執行調度,處理機器…

    Linux干貨 2015-04-13
  • 學習伊始宣言

    學習后的狀態 以人事相宜為追求,優化職業資質 以勝任愉快為目標,保持職業體能 以創造績效為主導,開發職業意識 以適應市場為基點,修養職業道德 學習宣言 如果不踏出第一步就永遠也不可能到達目的地,讓我們從此刻出發

    Linux干貨 2016-11-28

評論列表(1條)

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

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

欧美性久久久久