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這個參數即可?!?br />             # 文件的權限為具有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
下一篇 2015-09-16

相關推薦

  • vim淺談

            在Linux的世界里,絕大部分的配置文件都是以ASCII的純文本形式存在的,所以作為一名優秀的Geek,熟練掌握一種文本編輯輯器是非常重要的。         Linux世界中的文本編輯器有很多…

    Linux干貨 2015-04-27
  • 數組

    數組 變量:存儲單個元素的內存空間 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合 數組名和索引 索引:編號從0開始,屬于數值索引 注意:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引, 八十的數組支持稀疏格式(索引不連續 聲明數組: Declare -a ARRAY_NAME Declare -A ARRAY_NAME:關聯數組 注意…

    Linux干貨 2018-01-02
  • 文件通配符與命令行擴展

    * 匹配零個或多個字符 ? 匹配任何單個字符 ~ 當前用戶家目錄 ~mage 用戶mage家目錄 ~+ 當前工作目錄 ~- 前一個工作目錄 [0-9] 匹配數字范圍 [a-z] 字母 [A-Z]字母 ???????? [a-Z] 會以aAbBcC…小大小大列出,特別要注意 [wang] 匹配列表中的任何的一個字符 [^wang]匹配列表中的所有字…

    2017-11-12
  • N25_第四周博客作業_leon

    N25_第四周博客作業_leon 1.    復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限復制[root@localhost ~]# cp -rp /etc/skel /home/tuser1   查看目錄里文件的權限[root@loc…

    Linux干貨 2017-01-16
  • linux密碼的破解與保護

    找回root口令:   遇到密碼丟失的情況,如果只是普通用戶的密碼丟失,那么可以讓管理員重新設定密碼。但是如果管理員用戶的密碼丟失,那該如何解決?   在 Linux環境中root 密碼忘記還是可以救回來的!只要能夠進入并且掛載 / , 然后重新設定一下root的密碼,就救回來啦!這是因為開機流程中,若強制進入runlevel 1 時, …

    Linux干貨 2016-09-22
  • linux系統自動安裝之PXE

    PXE(集成在網卡上的)預啟動執行環境 (能夠通過網絡實現操作系統安裝) PXE工作原理1、Client向PXE Server上的DHCP發送IP地址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC地址),如果合法則返回Client的IP地址,同時將啟動文件pxelinux.0的位置信息一并傳送給Client2、Client向P…

    2018-01-16

評論列表(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

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

欧美性久久久久