Find小總結及應用

Find總結及應用

搜索命令:
    locate命令:
        在文件系統上查找符合條件的文件
        非實時查找( 數據庫查找) :locate    
    find:
        實時查找
locate命令
查詢系統上預建的文件索引數據庫
    /var/lib/mlocate/mlocate.db
    依賴于事先構建的索引
    剛剛創建的文件使用locate搜索不到,需要手動更新數據庫。
    索引的構建是在系統較為空閑時自動進行(周期性 任務),管理員手動更新數據庫(updatedb)
    
索引構建過程需要遍歷整個根文件系統,極消耗資源

工作特點:
    ?  查找 速度 快
    ?  模糊 查找
    ?  非實時查找
    ?  搜索的是文件的全路徑,不僅僅是文件名
    ?  可能只搜索用戶具備讀取和執行權限的目錄
    
locate KEYWORD有用的選項
    ? -i 執行區分大小寫的搜索
        [root@localhost ~]# locate -i  -n 5 /root/bin '*.SH$'
        /root/bin
        /root/bin/absum.sh
        /root/bin/argsnum.sh
        /root/bin/backup.sh
        /root/bin/checkint.sh

    ? -n N 只列舉前N 個匹配項目
        [root@localhost ~]# locate -n 5 /root/bin '*.sh$'
        /root/bin
        /root/bin/absum.sh
        /root/bin/argsnum.sh
        /root/bin/backup.sh
        /root/bin/checkint.sh

locate foo
    ? 搜索名稱或路徑中帶有“foo ”的文件
locate -r ‘\.foo$’
    ? 使用Regex 來搜索以“.foo“結尾的文件
        [root@localhost ~]# locate -r '\.foo$'
        /root/test.foo

find命令

實時查找工具,通過遍歷指定路徑完成文件查找;

工作特點:
    ? 查找速度略慢
    ? 精確查找
    ? 實時查找
    ? 可能只搜索用戶具備讀取和執行權限的目錄
  • 語法:

find [OPTION]... [ 查找路徑] [ 查找條件] [ 處理動作]
    查找路徑:指定具體目標路徑;默認為當前目錄

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

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

根據文件名和inode 查找:
    -name " 文件名稱" :支持使用glob
        *, ?, [], [^]
    [root@localhost ~]# find -name hostping*
    ./bin/hostping.sh
    ./bin/hostping2.sh

    在不指定路徑的情況下,默認搜索當前目錄及其子目錄及其文件
    -iname " 文件名稱" :不區分字母大小寫
        [root@localhost ~]# find  -iname "*.SH"
        ./bin/sumfile.sh
        ./bin/argsnum.sh
        ./bin/per.sh
        ./bin/nologin.sh
        ./bin/absum.sh
        ./bin/numsum.sh
        ./bin/filetype.sh
        ./bin/systeminfo.sh
        ./bin/backup.sh
        ./bin/disk.sh
        ./bin/links.sh
        ./bin/sumid.sh
        ./bin/sumspace.sh
        ./bin/hostping.sh
        ./bin/login.sh
        ./bin/hostping2.sh
        ./bin/createuser.sh
        ./bin/yesorno.sh
        ./bin/checkint.sh

    -inum n 按inode 號查找
        [root@localhost ~]# ll -i
        total 16
        201431364 drwxr-xr-x  2 root root    6 Jul 29 02:16 2016-07-29
        201363477 -rw-------. 1 root root 2633 Jul 25 21:08 anaconda-ks.cfg             
        1111 drwxr-xr-x  2 root root 4096 Aug 15 12:01 bin        
        201382282 -rw-r--r--  1 root root   62 Aug 15 11:09 f1        
        201382285 -rw-r--r--  1 root root  614 Jul 29 04:07 fstab        
        201391491 -rw-r--r--  1 root root    0 Aug 15 20:06 test.foo
        [root@localhost ~]# find -inum 201382285
        ./fstab

    -samefile name 相同inode 號的文件
    -links n 鏈接數為n 的文件
        [root@localhost ~]# find -links 3
        ./.cache
        ./.config
        [root@localhost ~]# ll ./.config
        total 4
        drwxr-xr-x 2 root root   6 Jul 25 13:18 abrt
        -rw-r--r-- 1 root root 278 Jul 25 13:30 Trolltech.conf

    -regex "PATTERN" :以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名(使用的不是通配符,是正則表達式)
        [root@localhost ~]# find / -regex ".*\.sh"
    根據屬主、屬組查找:
        -user USERNAME :查找屬主為指定用戶(UID)的文件
        -group GRPNAME:  查找屬組為指定組(GID)的文件
        -uid UserID :查找屬主為指定的UID號的文件
        -gid GroupID :查找屬組為指定的GID號的文件
        -nouser :查找沒有屬主的文件
        -nogroup :查找沒有屬組的文件
    
    多個選項一起的話空格隔開,默認就是并且的關系
    
根據文件類型查找:
    -type TYPE:
    ? f:  普通文件
    ? d:  目錄文件
    ? l:  符號鏈接文件
    ? s :套接字文件
    ? b:  塊設備文件
    ? c:  字符設備文件
    ? p: 管道文件
    
組合條件:
    與:-a
    或:-o
    非:-not, !

德· 摩根定律:
    (非 P) 或 (非 Q) =  非(P 且 Q)
    (非 P) 且 (非 Q) =  非(P 或 Q)

示例:
    !A -a !B = !(A -o B)
    !A -o !B = !(A -a B)

排除目錄
? 示例:查找/etc/ 下,除/etc/sane.d 目錄的其它所有.conf后綴的文件
    find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print
    find  要查找的目錄  -path 要排除的目錄  -a -prune -o -name  要找的文件  -print 打印    
根據文件大小來查找:
    -size [+|-]#UNIT
        常用單位:k, M, G    #UNIT: (#-1, #]
        如 :6k  表示(5k,6k]
    -#UNIT :[0,#-1]
        如 :-6k  表示[0,5k]
    +#UNIT :(#, ∞ )
        如 :+6k  表示(6k ,∞ )
        
根據時間戳: 
以“天”為單位;
    -atime [+|-]#,
        #: [#,#+1)
            如:7 [7,8)::過去的第七天到第八天
        +#: [#+1, ∞ ]
            如:+7 [8,∞)過去的第八天到過去的無窮遠天
        -#: [0,#)
            如:-7 [0,7)
    -mtime
    -ctime
以“分鐘”為單位:
    -amin
    -mmin
    -cmin

根據權限查找:
-perm [/|-]MODE
    MODE:  精確權限匹配:八進制表示法642
    /MODE :任何一類(u,g,o) 對象的權限中只要能一位匹配即可,或關系,+從centos7 開始淘汰
    -MODE :每一類對象都必須同時擁有指定權限,與關系    0  表示不關注
    ? find -perm 755 會匹配權限模式恰好是755 的文件
    ?  只要當任意人有寫權限時,find -perm +222 就會匹配
    ?  只有當每個人都有寫權限時,find -perm -222 才會匹配
    ?  只有當其它人(other )有寫權限時,find -perm -002才會匹配
  • 處理動作

    -print :默認的處理動作,顯示至屏幕;
      -ls :類似于對查找到的文件執行“ls -l” 命令
      -delete :刪除查找到的文件;
      -fls file :查找到的所有文件的長格式信息保存至指定文件中
      -ok COMMAND {} \;  對查找到的每個文件執行由COMMAND 指定的命令;{}表示搜索到的文件。
          對于每個文件執行命令之前,都會交互式要求用戶確認
      (exec可以全部執行命令指定的操作,不需要一個個確認操作)
      例如:find -perm -222 -exec chmod o-w {} \;
      
      -exec COMMAND {} \;  對查找到的每個文件執行由COMMAND 指定的命令
      {}:  用于引用查找到的文件名稱自身
          find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
          
      
      [root@localhost testc]# chmod a=wx ff{1..4}
      [root@localhost testc]# find /root/testc/ -perm -222
      /root/testc/ff1
      /root/testc/ff2
      /root/testc/ff3
      /root/testc/ff4
      /root/testc/ff5
      /root/testc/ff6
      /root/testc/ff7
      /root/testc/ff8
      [root@localhost testc]# find /root/testc/ -perm -222 -ok chmod a=r {} \;
      < chmod ... /root/testc/ff1 > ? y
      < chmod ... /root/testc/ff2 > ? y
      < chmod ... /root/testc/ff3 > ? y
      < chmod ... /root/testc/ff4 > ? 
      < chmod ... /root/testc/ff5 > ? 
      < chmod ... /root/testc/ff6 > ? 
      < chmod ... /root/testc/ff7 > ? 
      < chmod ... /root/testc/ff8 > ? 
    
      [root@localhost testc]# ll
      total 0
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff1
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff2
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff3
      --wx-wx-wx 1 root root 0 Aug 16 00:11 ff4
      -rw-rw-rw- 1 root root 0 Aug 16 00:11 ff5
      -rw-rw-rw- 1 root root 0 Aug 16 00:11 ff6
      -rw-rw-rw- 1 root root 0 Aug 16 00:11 ff7
      -rw-rw-rw- 1 root root 0 Aug 16 00:11 ff8
      [root@localhost testc]# find /root/testc/ -perm -222 -exec chmod a=r {} \;
      [root@localhost testc]# ll
      total 0
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff1
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff2
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff3
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff4
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff5
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff6
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff7
      -r--r--r-- 1 root root 0 Aug 16 00:11 ff8
      [root@localhost testc]# 
    
      
      有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題
          find | xargs COMMAND
      
      [root@localhost ~]# find /root/testc/ -perm -222 | xargs chmod a+x
      [root@localhost ~]# ll /root/testc/
      total 0
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff1
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff2
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff3
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff4
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff5
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff6
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff7
      -rwxrwxrwx 1 root root 0 Aug 16 00:11 ff8
    • 1、查找/var目錄下屬主為root,且屬組為mail的所有文件
      
      [root@localhost ~]# find /var -user root -group mail/var/spool/mail
      [root@localhost ~]#
      
      2、查找/var目錄下不屬于root、lp、gdm的所有文件
      
      [root@localhost ~]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls
      
      3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
      
      [root@localhost ~]# find  /var -not \( -user root -o -user postfix \) -mtime -7/var/log/cups
      /var/spool/mail/tom
      /var/spool/mail/alice2
      /var/spool/mail/alice3
      /var/spool/mail/alice5
      
      4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
      
      [root@localhost ~]# find / \( -nouser -nogroup \) -atime -7find: ‘/proc/1840/task/1840/fd/6’: No such file or directory
      find: ‘/proc/1840/task/1840/fdinfo/6’: No such file or directory
      find: ‘/proc/1840/fd/6’: No such file or directory
      find: ‘/proc/1840/fdinfo/6’: No such file or directory
      /home/alice2
      /home/alice2/.mozilla
      /home/alice2/.mozilla/extensions
      /home/alice2/.mozilla/plugins
      /home/alice2/.bash_logout
      /home/alice2/.bash_profile
      /home/alice2/.bashrc
      
      5、查找/etc目錄下大于1M且類型為普通文件的所有文件
      
      [root@localhost ~]# find /etc -size +1M -type f/etc/selinux/targeted/policy/policy.29/etc/udev/hwdb.bin
      [root@localhost ~]#
      
      6、查找/etc目錄下所有用戶都沒有寫權限的文件
      
      [root@localhost ~]# find /etc -not -perm /222 -ls
      
      7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
      
      [root@localhost ~]# find /etc -not -perm -111 -ls
      
      8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
      
      [root@localhost ~]# find /etc/init.d -perm -113 -ls134305318    0 lrwxrwxrwx   1 root     root           11 Jul 25 20:05 /etc/init.d -> rc.d/init.d

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

(0)
dxkbokedxkboke
上一篇 2016-08-16 13:59
下一篇 2016-08-16 13:59

相關推薦

  • 正則表達式基礎

    一、正則表達式: 元字符是用來闡釋字符表達式意義的字符,簡言之,就是用來描述字符的字符。 正則表達式RE(Regular Expression)是由一串字符和元字符構成的字符串。 正則表達式的主要功能是文本查詢和字符串操作,它可以匹配文本的一個字符或字符集合。實際上正則表達式完成了數據的過濾,將不滿足正則表達式定義的數據拒絕掉,剩下與正則表達式匹配的數據。 …

    Linux干貨 2017-06-04
  • Shell腳本自動部署(編譯)LAMP平臺

    Shell腳本自動部署(編譯)LAMP平臺 Shell腳本自動部署(編譯)LAMP平臺 為什么要用腳本進行部署? 腳本功能介紹 筆者環境 準備工作 聲明 使用測試 腳本代碼 Shell腳本自動部署(編譯)LAMP平臺 LAMP是當下非常流行的一套Web架構,我們可以在GNU/Linux下通過其他人打包的程序包來進行安裝; 但是在生產環境中,很多時候都需要我們…

    Linux干貨 2016-03-26
  • 磁盤陣列RAID

    磁盤陣列RAID 什么是RAID RAID的全稱是Redundant Array of Inexpensive Disks 可以釋義為 廉價磁盤冗余陣列,后來的RAID里的字母I被認為是Independent,即獨立的磁盤冗余陣列。 RAID的作用 由于服務器中磁盤讀寫率太大,所以磁盤經常損壞,raid可以讓壞了一塊磁盤時,服務器不至于巖機。當然這只是其中的…

    Linux干貨 2017-06-18
  • centos系統中常用的命令

    日志文件說明:  /var/log/message      系統啟動后的信息和錯誤日志,是Red Hat Linux中最常用的日志之一   /var/log/secure      &nb…

    Linux干貨 2016-06-28
  • 運維自動化之系統安裝

    自動化安裝系統,cobbler的安裝使用

    Linux干貨 2018-01-15
  • 小工具(維基百科)

     維基百科  方法:復制C:\Windows\System32\drivers\etc到我的電腦地址欄               打開hosts,選擇文本文檔方式打開              19…

    Linux干貨 2017-07-10

評論列表(1條)

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

    文章對find的常見用法比較詳細,但是實驗部分的例子不太清晰,我們做實驗時先有一個問題,而后通過實驗區驗證我們的想法要知道自己在干什么。

欧美性久久久久