文件查找命令之find

文件查找命令一共有兩種,locate 和find ,那么他們在用法和功能上面有什么區別呢?

    locate:查找速度快,模糊查找,遍歷整個文件系統的目錄到數據庫中,然后在去數據庫中查找,依賴于事先創建好的索引庫,該數據庫屬于系統自動創建,定期自動更新,也可手動跟新,更新命令updatedb,更新數據庫需要遍歷整個根文件系統,所以極其消耗資源。

                     索引數據庫:/var/lib/mlocate/mlocate.db

                     常用選項:

                                    -c:查看有多少個文件符合條件

                                    -i:不區分大小寫

                                    -n #:例舉前#個匹配到的文件

    find:查找速度略慢,精確實時查找,自動遍歷你所指定目錄中查找。

                    格式:find     [選項]    [要查找的文件路徑]    [查找條件]     [處理動作]

                    根據文件名稱查找:

                                        -name:文件名稱

                                        -iname:文件名稱忽略大小寫

                root@cenots6.8  /testdir # find / -name passwd
                /usr/bin/passwd
                /etc/pam.d/passwd

                    根據連接數查找文件:

                                        -links n:連接數為n的文件

                            root@cenots6.8  /testdir # find -links 2  ###不指明查找路徑默認當前目錄
                            .
                            ./a
                            ./c

                    利用正則表示式查找匹配到的文件:

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

                            root@cenots6.8  /testdir # find -regex .*.sh
                            ./filetype.sh
                            ./14sum.sh
                            ./systeminfo.sh
                            ./checkdisk.sh

                    根據inode號查找:

                                        -innum #:inode號————-當我們需要查找硬鏈接文件的個數時可以使用該命令

                                         -samefile name:根據文件名查找對應相同inode號的文件

                            root@cenots6.8  /testdir # find -inum 4194307
                            ./a
                            ./c
                            root@cenots6.8  /testdir # find -samefile a
                            ./a
                            ./c

                      根據文件類型查找:

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

                                                    TYPE: f、d、l、b、c、p、s

                                root@cenots6.8  /testdir # find /etc/ -type f  -ls

                       根據屬主和屬組查找:

                                            -user:根據屬主(UID)

                                            -group:根據屬組(GID)

                                            -nouser:沒有屬主

                                            -nogroup:沒有屬組

                                            -uid :根據uid

                                            -gid:根據gid

                            root@cenots6.8  /testdir # find -not  -user tom -a -not -user user1 
                            .
                            ./filetype.sh
                            ./14sum.sh
                            ./systeminfo.sh
                            root@cenots6.8  /testdir # find -not \( -user tom -o -user user1 \)
                            .
                            ./filetype.sh
                            ./14sum.sh
                            ./systeminfo.sh

                        根據權限查找:

                                             -perm #:精確匹配查找

                                             -perm  [+/]#:三種身份只要有一個滿足即可,centos7中只有“/”

                                             -perm -#:三個身份必須同時滿足指定的權限      

                                只要當任意人有寫權限時, find -perm +222就會匹配
                                只有當每個人都有寫權限時, find -perm -222才會匹配
                                  #### 注意:當權限位為0時表示不關注該位的權限,不管它

                        按文件大小查找:

                                              -size  #:查找文件大于#-1 ,小于#的文件

                                              -size  -#:查找大于0,小于等于#-1的文件

                                              -size  +#:查找大于#的文件

                         根據時間戳查找:

                                         以天為單位

                                              -atime  #:查看第#-1天到第#天查看過的文件

                                                         -#:查找#天之內查看過的文件

                                                        +#:查看#天之前查看過的文件

                                              -ctime  #:

                                              -mtime  #:     

                                         以分鐘為單位         

                                              -amin:

                                              -cmin:

                                              -mmin:

                        排除某一目錄去查找:

                                              -path dirName -a -prune :除了某一目錄之外查找

                find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf” -print

處理動作:

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

                -ls:對查找到的文件執行ll -i命令

                -delete:刪除查找到的文件

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

                -ok Command {} \;  :對查找到文件執行Command命令,{}指查找到的文件,\;  結束符,且該命令交互執行

                -exce Command {} \;  :對查找到文件執行Command命令,{}指查找到的文件,\;  結束符,命令不需要交互

                find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
                find ~ -perm -002 -exec chmod o-w {} \;

                 當find查找的文件給指定的命令時,有些命令不能接受過多參數,此時命令執行可能會失敗,可采取如下措施:

                        find | xargs Command                 

                find /tmp/ -perm -003 -type f | xargs chown o-wx (管道傳遞過來的參數就字符串,所以必須加xargs)

                 注意:處理動作與它前面的查找條件是與的關系,因此在使用處理動作時,最好將前面的命令用“()”括起來。

            找出/tmp目錄下,屬主不是root,且文件名不以f開頭的
        find /tmp \( -not -user root -a -not -name 'f*' \) -ls
        find /tmp -not \( -user root -o -name 'f*' \) –ls
         ####注意:在使用\(空格.*空格\)時,括號內兩要有空格

組合條件:
                與: -a
                或: -o
                非: -not, !
德·摩根定律:
                (非 P) 或 (非 Q) = 非(P 且 Q)
                (非 P) 且 (非 Q) = 非(P 或 Q)

                 所有都有=!至少一位沒有

                 所有都沒有=!至少一位有

        示例:
                !A -a !B = !(A -o B)    在執行兩條查找條件時,不加-a 或 -o選項 默認 -a 與的關系
                !A -o !B = !(A -a B)

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

root@cenots6.8  ~ # find /var -user root -group mail -ls   ######前面兩個查找條件與-ls是與關系 所以不用把前面括起來
656576    4 drwxrwxr-x   2 root     mail         4096 8月 15 13:25 /var/spool/mail

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

find /var -not \( -user root -o -user lp -o -user gdm \)

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

find /var \( -mtime -7 -not -user root -not -user postfix \)

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

find /  \( -nouser -o -nogroup \) -atime -7
        ###并且優先級高于或者,因此前面必須加括號

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

find /etc/ -size +1M -type f

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

find /etc/ -not -perm /222

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

find /etc -not -perm -111

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

find /etc/init.d/ -perm -113 init.d 是一個軟連接需要加/    這里需要注意 init.d 是個軟連接,所以不能寫成/init.d

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

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

相關推薦

  • CentOS6.7下關于vsftpd的應用之一(匿名用戶/普通用戶/虛擬用戶)

    1)使用yum安裝vsftpd [root@C67-X64-A1 ~]# /etc/init.d/vsftpd start為 vsftpd 啟動 vsftpd:           &nbs…

    Linux干貨 2016-09-19
  • 心清冷其若冰,志皎潔其若云

    第一篇,當做測試也做開始。 心清冷其若冰,志皎潔其若云。 這鬧哄哄的人間啊,仿佛是一堆雜貨。無奇不有,無所不能。情感,城市,人際。每天走在這雜亂里,需要有一顆清澈而安靜的心,來面對。 會累的。就算是擁有了許多,也是會累的。偶爾,我們也會在深夜里淚流滿面吧。偶爾,我們也會心煩意亂的不知所措吧。 太多欲望的人間,熱鬧的上演著各種劇本。太多空洞的靈魂,喧囂著各種聲…

    Linux干貨 2016-11-28
  • 馬哥教育網絡班22期-第1周博客作業2

    date命令 date – print or set the system date and time 顯示或設置系統日期和時間 【SYNOPSIS】 date [OPTION]… [+FORMAT] 【OPTIONS】 -d:–date=STRING,顯示字符串所指的日期與時間, 而不是當前時間,字符串前后必須加上雙引號…

    Linux干貨 2016-08-15
  • 變量的高級操作

                                                  一  字符串切片 &nbsp…

    Linux干貨 2017-04-16
  • CentOS的啟動流程

                      一個操作系統的開啟與關閉不是我們手動的打開與關閉電源那么簡單。這個過程中涉及太多的內部服務的打開與關閉。而在這個過程中如果出現什么問題,那么以后的某些服務…

    2017-09-01
  • 磁盤分區管理與文件系統的創建

    磁盤分區管理與文件系統的創建   不光是linux文件系統,所有的大結構,多數據湊到一塊的時候,單一的管理是沒有能力處理這樣龐大規模的存在的。所謂“君王不下縣”也就是這個道理。要系統的,規范的管理一個國家,存在著省、市這樣的層級結構。linux系統也是這樣,將整個系統劃分為若干個分區,實現不同功能,不同層級的規范管理,這就是創建磁盤分區的意義。既然…

    Linux干貨 2016-09-01
欧美性久久久久