linux中文件查找的常用命令


文件查找

小編在學這堂課的前一天夜里打嗝打了半宿,第二天上課的時候迷迷糊糊,所以,導致文件查找這章我放了好久的鴿子。

這里是回看視頻摘出來的筆記。如有理解有偏差,請留言。

本篇只有3個命令,重點是find,時間有限的朋友可以只看find命令。這太過重要了。

 

whereis命令
        在一些特定的目錄搜索,搜索二進制文件、幫助文件、源文件等

        選項:
                        不加任何選項就會列出所有文件。
            -b            只搜索二進制文件
            -m            只搜索幫助文件
            -s            只搜索源文件
            -l            列出whereis搜索的路徑,也就是whereis會在這些路徑下搜索內容
            -u            不是上述三類文件的其它類型文件。
       



locate命令
        用來快速搜索文件的工具,是根據索引數據庫搜索的。數據路位置/var/lib/mlocate/mlocate.db
        
        1、新系統可能沒有這個數據庫,updatedb命令可以手工更新數據庫
        2、updatedb這個命令會消耗大量的IO    需要在系統不繁忙的時候更新
        3、updatedb命令會根據/etc/updatedb.conf的設定取搜索硬盤內的文件名,並保存在/var/lib/mlocate目錄下的數據庫內。
        
        locate命令            主要用來搜索靜態文件
            -i        不區分大小寫搜索
            -r        使用基本正則表達式
            -b        只搜索文件名,而不搜索全路徑。默認是搜索全路徑
            -c        計數
            -n #    只顯示前幾個搜索結果
            -S        顯示locate數據庫信息
        
            備注:
                locate不能指定文件搜索路徑,要想指定搜索路徑需要手工使用正則表達式指定,祥看示例
                locate不是實時搜索,而且是模糊搜索
                locate默認會搜索文件的全路徑,不僅僅是文件名,意思是如果目錄包含某個關鍵詞,目錄下的所有文件都會被搜索到
                locate只會搜索當前用戶能訪問到的目錄,意思是如果某個用戶對某個目錄沒有訪問權限,該目錄就不會被搜索
            示例說明:指定搜索路徑{
                [root@CentOS7 scripts]#locate -r "^/data/scripts/.*\.sh"
                /data/scripts/FOOT.sh
                /data/scripts/adddescrption.sh
                /data/scripts/arg.sh
                /data/scripts/arg2.sh
                /data/scripts/argsnum.sh
                /data/scripts/backup_etc.sh
                /data/scripts/bim.sh
                /data/scripts/checkdisk.sh
                /data/scripts/checkint.sh
                /data/scripts/createuser.sh
                /data/scripts/df_warning.sh}

find命令
        實時查找,精確查找,查找條件豐富,只搜索具有權限的目錄
        
        find [OPTIONS]  [查找路徑]    [查找條件]    [處理動作]
            默認是遞歸搜索,默認是搜索當前目錄
        

選項:
            -maxdepth #         最大搜索深度,指定搜索目錄下搜索到第幾級
            -mindepth #        最小搜索深度,
            
            -depth或-d        一般是先搜索文件夾,再去搜索文件夾內的文件。如果加上該選項-d,就會先搜索文件,在搜索目錄

 

查找條件:
            根據文件名搜索
                -name 文件名      根據文件名搜索,精確匹配而不是模糊搜索。支持通配符
                        如果想要模糊搜索,可以使用   "*文件名*"   建議在使用通配符的時候要加上雙引號,要不會產生各種莫名奇妙的問題
                -iname 文件名      不區分大小寫搜索
                -inum INODE         根據INODE節點號搜索,可以用來搜索硬鏈接
            
                -samefile 文 件名     搜索相同節點編號的文件,需要注意的是,需要搜索同一分區內的相同節點編號
                -links    #          根據鏈接數為#這個條件進行搜索
                -regex "PATTERN"      以PATTERN匹配整個文件路徑,而非文件名稱
            
            根據屬性信息搜索
                -user    用戶名         根據所有者搜索
                -group    組名          根據所屬組搜索
                -nouser    用戶名     搜索沒有所有者的文件
                -nogroup 組名        搜索沒有所屬組的文件
                -uid   UID               根據UID查找
                -gid   GID               根據GID查找
            
            根據文件類型搜索
                -type  TYPE            根據文件類型搜索
                    TYPE:
                        d            查找文件類型為目錄的所有文件
                        f            查找文件類型為普通文件的所有文件
                        p            查找文件類型為管道文件的所有文件
                        s            查找文件類型為套接字的所有文件
                        c            查找文件類型為字符設備的所有文件
                        b            查找文件類型為塊設備的所有文件
                        l            查找文件類型為軟連接的所有文件
                        
                        
            搜索空文件或目錄
                -empty                搜索空文件或者文件夾
            
            
            組合條件
                -a    與            默認就是按照並且條件搜索多個條件
                -o    或
                -not|!  非
                        
                因為與的優先級高於或的優先級,可以使用()擴起或的選項以提高或的優先級,()需要轉義寫成\( \)
            
                德*摩根定律:
                    (非A)或(非B)=非(A且B)
                    (非A)且(非B)=非(A或B)
                
            排除特定目錄搜索
                -path 排除文件夾路徑 -a -prune -o -name 文件名    指定不搜那些文件夾
                  例:

        find / \( -path "/sys" -o -path "/proc"\) -a -prune -o -name "*.conf"
                
                  # 搜索除/proc和/sys目錄以外的所有路徑下的以.conf結尾的文件
                    find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -name "*.conf"
            
            根據文件大小搜索
                -size [+|-] #UNIT
                        常用單位k M G c(byte)  注意大小寫
                    6k    表示 (5k,6k],包括6K不包括5K
                    -6k     表示 [0k,6-1k],包括0k也包括5k,兩個之間
                    +6k     表示(6K,oo),不包含6k
                    
                    
                    -size 1024k和-size 1M的區別
                        -size 1024k        會搜索到1023k到1024k之間的文件
                        -size 1M        會搜索到0到1M之間的文件
            
            根據時間戳查找
                -atime [+|-]#
                    +10    表示11天以前的文件
                    -1    表示最近一天內的文件
                    10    表示10天到11天內,
                -mtime [+|-]#
                -ctime [+|-]#
                
                -mmin  [+|-]#    表示按分鍾搜索
                -amin  [+|-]#
                -cmin  [+|-]#
            
            根據權限搜索
                -perm [/|-] MODE    
                    MODE:精確權限匹配
                    /MODE    任何一類(u g o)對象的任何一位權限(r w x)中,只要能匹配一位權限就能搜索到,是或的關系
                    -MODE    表示任何一類(u g o)對象的權限中r w x三者都完滿條件才匹配,是並且的關系
                    
                    如果MODE中三類對象中有一位是0,表示對應該類對象無論有沒有權限無所謂
                備注,在centos7后,+的寫法開始淘汰,使用/代替了
        
                find -perm 755          會精確搜索權限是755的文件
                find -perm /222      只要任何一類用戶有寫權限就會匹配。或者說,至少有一類用戶有寫權限就會匹配
                find -perm /111      只要任何一類用戶有寫權限的就會匹配。或者說,至少有一類用戶有執行權限就會匹配
                find -perm /666      只要任何一類用戶有讀或者有寫權限就會匹配。
                find -perm /001      其他用戶有執行權限的文件才會匹配
                find -perm /002      其他用戶有寫權限的文件才會匹配
                find -perm -222      只有當文件的所有者、所屬組、其他人三類用戶都有寫權限才會匹配
                find -perm -002      只要其它人具有寫權限就會匹配,和find -perm /002的作用相同
                find -perm -022      所屬組和其他人都具有寫權限就會匹配
                find -perm 002       只匹配 --- --- -w-權限的文件
       

處理動作
            -print            默認,會把搜索結果打印屏幕,默認是以空格作為分割符。可以使用pring0選項改成使用nul作為分隔符
            -ls                把搜索的文件的詳細屬性顯示出來
            -fls /PATH/TO/FILE        查找到的每個文件長格式顯示保存至指定文件,相當於 -ls > /PATH/TO/FILE
            -delete            把搜索到的文件刪除,太危險,慎用
            
            -ok COMMAND {} \;    對查找到的每個文件交由COMMAND指定的命令執行,但是在執行前會交互式提問
            -exec COMMAND {} \;    對超找到的每個文件交由COMMAND指定的命令執行,不會交互提問直接執行
                    {} 指的是find搜索的的文件,可以想成一個變量,此變量引用find搜索到的文件
                    \;    交由COMMAND執行 必須要有\;結束
                    
                find /data -exe rm {} \        刪除搜索到的文件
                find /var -size +10M -mtime +10 -ok mv {} /data \    把在VAR下搜索到的大於10M時間超過10天之前的文件移動到data目錄下
                find /data -name "*.txt" -exec cp {} {}.bak \;        批量加后綴。注意雙{}的使用
            
            小技巧:利用find 和 mv 組合批量加后綴名:
          

                [root@CentOS7 tmp]# ll
                total 0
                -rw-r--r-- 1 root root 0 May  3 05:40 a
                -rw-r--r-- 1 root root 0 May  3 05:40 b
                -rw-rw-rw- 1 root root 0 May  3 05:40 c
                -rw-r--r-- 1 root root 0 May  3 05:40 d
                -rw-r--r-- 1 root root 0 May  3 05:40 e
                -r-------- 1 root root 0 May  3 05:40 f
                -rw-r--r-- 1 root root 0 May  3 05:40 g
                [root@CentOS7 tmp]# find . -type f -exec mv {} {}.haha \;        #小技巧利用find和mv組合批量加后綴名
                [root@CentOS7 tmp]# ll
                total 0
                -rw-r--r-- 1 root root 0 May  3 05:40 a.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 b.haha
                -rw-rw-rw- 1 root root 0 May  3 05:40 c.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 d.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 e.haha
                -r-------- 1 root root 0 May  3 05:40 f.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 g.haha
                [root@CentOS7 tmp]# 

 

 


  練習:
        1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;
            find /var -user root -a -group mail -ls
        
        2、查找/usr目錄下不屬於root,bin或hadoop的所有文件或目錄;用兩種方法;
            find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
            find /user -not -user root -a -not -user bin -a -not -user hadoop -ls
        
        3、查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄;
            find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
            find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
        
        4、查找當前系統上沒有屬主或屬組,且最近一周內曾被訪問過的文件或目錄;
            find \( -nouser -o -nogroup \) -a -atime -7 -ls
        
        5、查找/etc目錄下大於1M且類型為普通文件的所有文件;
            find /etc/ -size +1M -a -type f -ls
        
        6、查找/etc目錄下所有用戶都沒有寫權限的文件;
            find /etc -not -perm /222 -type f -ls
        
        7、查找/etc目錄至少有一類用戶沒有執行權限的文件;
            find /etc -not -perm -111 -type f -ls
        
        8、查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有文件;
            find /etc/init.d -perm -113 -type f -ls    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM