find命令簡單總結

 find

    字符串類查詢:   
         -type   //根據文件類型查找
                f:普通文件
                d:目錄
                c:字符文件
                b:塊設備    
                s:套接字文件
                p:命名管道

       -i:忽略大小寫
       -name ,  -iname    //按文件名查找
       -path ,    -ipath    //按路徑名查找
       -regex ,  -iregex   //使用正則表達式
  例:

 # 要十分注意這類模糊查詢,在腳本中一定要加引號,否則Gi*會被替換為所有以Gi開頭的文件,導致find報錯誤,說沒有指定查找路徑。
   find ${BINDIR} -name "Gi*" -exec md5sum {} \;
 # 找出文件名 或 路徑中含有 script字樣的所有文件 及 路徑,并忽略大小寫。              
   find . -ipath  "*script*" 
 # 查找當前目錄下以.py 或.sh結尾的文件 
   find . -iregex  ".*\(\.py\|\.sh\)$"

 -inum  //通過文件或目錄的inode查找
  例:

    linux有時會遇到一些很難操作的文件名,這時可用ls -i看它到inode,在用find找到這個inode對應的文件,在刪除。

 find / -inum 1002910 -exec  rm {} \;   # {}:大括號是前面-inum參數找到的所有文件。

 -prune  : 修剪掉指定目錄;即過濾指定目錄。
  例:搜索當前目錄下除目錄名為etc的目錄外,其它目錄的所有文件。

 find  .  \( -name "etc"  -prune \)  -o  \( -type f -print \)
 # -maxdepth  指定查找的目錄最大深度
 # -mindepth  指定查找的目錄最小深度。
   find  /  -maxdepth  2  -type  f  
   find  /  -mindepth  3  -type  f

 

數字類查找:

  -size      
  # 與:-and , -a
    # 找大于3M 并且 小于4M的文件
      find  /  -size  +3000k   -and   -size  -4000k    
  # 或:-or , -o  
      find  /  -size  -3000k  -or  -size  +4000k
  # 非:-not , !  
       ---------------------------------------------------    
         兩個條件沒有指定邏輯關系時,默認使用“與”        
           -not A -a -not B  等價于  -not(A -o B)
           -not A -o -not B  等價于  -not(A -a B)
       --------------------------------------------------
   例:  
   # 查找/etc目錄下最近一周內其內容修改過,且屬主不為root或hadoop的所有文件;
      find /etc/ ! \( -user root -a -user hadoop \) -mtime -7 -ls   
      # 等價于   
      find  /etc/ ! -user root  -o ! -user hadoop -mtime -7 -ls   
   # 查找/etc目錄下所有用戶都沒有寫權限的文件;【注:權限匹配請看下面關于如何計算權限匹配的說明】
      find /etc ! \( -perm -222 -o  -perm -220 -o -perm -200 -o -perm -022 -o -perm -002 -o -perm -020 -o -perm -202 \) -ls   
      # 等價于   
      find /etc  ! -perm -222 -a ! -perm -220 -a  ! -perm -200 -a ! -perm -022 -a ! -perm -002 -a ! -perm -020 ! -perm -202 -ls  
 
 以天為單位:
     -atime
     -mtime
     -ctime   
 以分鐘為單位:
     -amin 
     -mmin
     -cmin   
 示例:
    # -5指定是 當前時間 -  5天之間 被訪問的都找出來。
            find  /  -atime  -5    
    # +5指的是 5天前往更久遠的所有時間,只要文件內容被修改都會被找到。
            find  /  -mtime  +5  
    # 表示從當前時間向后數5個24小時,5就是第5個24小時的整點處,屬性信息被改變過的所有文件。  
            find  /  -ctime  5
----------------------------------|5|---------------------------------|當前時間|
|---------->[ +5:5天前 ]<---------| |------------>[ -5 :5天內] <------|
   # 注:find計算5天的方式是:從當前時間開始向前延伸24小時為一天,5天就是5個24小時,
       若指定為 5 ,則表示從當前時間向后數5個24小時,5就是第5個24小時的整點處。

 

         要驗證可用下面腳本測試:

cat find.sh 
 #!/bin/bash
 date 100118002014.02      # 修改時間為10月1號18:00:02
 touch a.txt               # 創建文件
 echo "File Create Complete!!"
 date 100418002014.00      # 修改時間為10月4號18:00:00
 echo "Now : October 4 ;  Script  Complete!!"
 find /root -mtime -3 | grep "a.txt"  
  # 1號18:00:02 到 4號18:00:00 之間跨度為:3天差2秒 
  # 設置找mtime為 3天內修改的文件,3天 包含 2天23個小時58秒
  # 故  可測出find 按時間找的時候就是按 24小時為一天算的。

 權限類查找:                   
        用戶和組查找
            -uid     按用戶的UID來查找文件或目錄
            -user    和 -group  按指定用戶或組來查找文件或目錄
            -nouser  和 -nogroup 它們可以找出系統中所有文件的owner丟失的文件,owner丟失可能是文件所有者被刪除或是通過NIS這種網絡用戶登陸后,創建的文件。
    示例:

    # 找出test創建的所有文件
        find  /  -user  test 
        find  /  -group   mysql      
    # 監控系統中owner丟失的文件【{}:大括號是前面-nouser參數找到的所有文件?!? 
        find / -nouser -exec chown root:root  {} \;

            權限查找
                find  / -perm 777
                  示例:
                     監控文件系統中other欄位存在write權限的文件和目錄。

            find  / -type  f -perm  -2  -->它可找出系統中所有other權限中包含write的文件。
                  【注意:權限 + 是做 or 運算, - 是做 and 運算。
                         -perm  -2:  指的是other欄中包含write權限的意思,
                                -22: 就是Group和Other兩欄中都有write權限的意思。
                                -222: 就是全部包含write權限的意思。
                  】
      find /etc/ ! -perm -111 -ls    //查找/etc目錄下至少有一類用戶沒有執行權限的文件
      ---------------------------------------
      合并后的權限     sst rwx rwx rwx
       0000----------000 000 000 000
       0001----------000 000 000 001
       0011----------000 000 001 001
       0100----------000 001 000 000
       0110----------000 001 001 000
       0010----------000 000 001 000
       0101----------000 001 000 001
       and(-)
       0111----------000 001 001 001
                           -   -   -
     結果                   ?   ?   ?   
       -----------------------------------------

     結果:每中權限組合與0111做與運算時,都為False.因此通過排除這個權限,就可以得到非0111權限的所有文件。
      
       對SUID和SGID的監控:
              【要關閉FileSystem上的SUID和SGID就在掛載FS時,加上nosuid這個參數即可。】
             # 文件的權限為具有SUID和SGID的。通過這個命令可從系統中找出所有SUID和SGID的文件,可用來進行對
            SUID和SGID文件的監控。

                find  /  -type  f -perm  +6000

      —————————————
      合并后的權限   sst rwx rwx rwx
       2000———-010 000 000 000
       4000———-100 000 000 000
       6000———-110 000 000 000
       6660———-110 110 110 000  //我們關注的SUID和SGID因此其他尾其實可以忽略

       or(+)
       6000———-110 000 000 000
                           – –
     結果               11
       ———————————–           
                      結果:6000通過與所有可能的權限做或運算,我們可知它每種情況都為True。
                      注意:因為我們只想找SUID和SGID被設置的文件,其他權限是什么我不關心.
    
            
   -ls:類似于ls -l顯示詳細信息
   -exec COMMAND {} \;
    例:
    測試方法:

     useradd  abc
     su - abc
     cd  /tmp
     mkdir abc
     cd  abc
     touch  abc.txt   abc.conf   abc.pdf
     su  -  root
     userdel  abc
     find /tmp -nouser -nogroup -fprintf /root/waining.txt '%AD %AT %-10s %n %p %u %#m\n' -exec chown root.root {} \;
       # 或:
       -exec mv {} /root/waindir/ \;
      # 注: %AD :輸入到文件的日期格式  %AT:輸入到文件的時間格式
        #   %-10s : 文件大小
        #   %n  : 硬連接
        #   %p  : 權限    %#m :權限細節   %u :用戶UID

     
   注:一次性查找符合條件的所有文件,并一同傳遞給-exec或-ok后面指定的命令;
         但有些命令不能接受過長的參數;此時使用另一種方式: find … | xargs COMMAND 
    ————————————————-
    關于xargs的一些用法提示:

    echo  a b  c  |  xargs  -n 1  echo   # xargs每次接受1個值,并將值傳給 echo輸出。
    echo  a b  c  |  xargs  -n 2  echo   # xargs每次接受2個值,并將值傳給 echo輸出。
    echo a  b  c  |  xargs  echo         # 一次接受所有的值,并將值傳給 echo輸出。
    cut -d ':' -f 1 /etc/passwd | xargs  -i  -e'mail'  -p  -n2  echo
    cut -d ':' -f 1 /etc/passwd | xargs  -i[  -e'mail'  -p  -n2  echo  [
                        #  -i 后面可指定 代替符 ,如:[, {}, 等
                        #  -e'mail' :指定已mail為結束標志,注意-e后面的參數不能有空格 ; 
                        #  -p:詢問   
                        #  -n2:指定一次傳幾個參數給 后面的命令。

          
          
          
 

 

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

(1)
Wn1mWn1m
上一篇 2015-09-14 09:38
下一篇 2015-09-16 09:34

相關推薦

  • 測試 網絡班23期

    123123123123

    Linux干貨 2016-09-12
  • N25-第8周博客作業

    第八周 1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態; 在線的主機使用綠色顯示; 不在線的主使用紅色顯示; #!/bin/bash # ip=172.16.250. for i in {1..254}; do if ping -w 1 -c 1 $ip$i &> /dev/n…

    Linux干貨 2017-03-10
  • 修改Linux命令終端提示符

    作業1. 設置自己的終端提示符,要求字符終端登錄時:     a> 需要帶顏色     b> 需要顯示當前執行到了第幾條命令     c> 顯示當前登錄終端,主機名和當前時間     這可以通…

    Linux干貨 2016-10-17
  • 網絡基本概念介紹

    Linux網絡屬性管理 網絡節點分布:廣域網、城域網、局域網 按交換方式:線路交換、報文交換、分組交換 按網絡拓撲結構:以太網,令牌環網、星型網絡、樹型網絡、總線型網絡、網狀網絡 Ethernet: CSMA/CD 載波偵探/多路訪問/沖突檢測機制 1.想發送信息的接點首先“監聽”信道,看是否有信號在傳輸。如果信道空閑,就立即發送。2.如果信道忙,則繼續監聽…

    Linux干貨 2016-07-29
  • CentOS7下重置root密碼

    CentOS7下重置root密碼          Linux系統、UNIX系統和其他類UNIX系統中,存在唯一的超級用戶root。普通用戶密碼忘掉可以用root用戶重置,但是一旦root密碼忘掉,事情就復雜起來了。本文主要介紹root密碼忘掉之后,重置密碼的過程。   &nbs…

    Linux干貨 2017-03-30
  • 內核及模塊管理

    內核及模塊管理基礎 查詢程序的依賴庫 ldd命令ldd [OPTION]…FILE…     [root@centos6 ~]# ldd /bin/ls         linux-vd…

    Linux干貨 2016-09-19

評論列表(3條)

  • huwei
    huwei 2015-09-15 23:29

    123456789 echo a b c | xargs -n 1 echo # xargs每次接受1個值,并將值傳給 echo輸出。
    格式怎么弄得

    • wn1m
      wn1m 2015-09-23 22:00

      @huwei不好意思,這段時間工作有點多。 我沒看明白你要說什么?

  • huwei
    huwei 2015-09-26 22:16

    例下面的格式是怎么弄得,看起來比較舒服,條理清晰

欧美性久久久久