find、locate詳細解析

文件查找

在linux系統中如果我們不知道具體的文件的具體位置,我們可以使用文件查找命令來找到我們想找的文件,linux中也有相當優秀的查找命令,(如locate、find),通常查找速度快是locate,因為它是利用數據庫查找的,所以速度很快,而find是全磁盤掃描進行查找,所以速度比較慢。

locate和find都是在文件系統上查找符合條件的文件含義。

區別:locate速度快,但如果新添加的文件需要更新其數據可才能找到,

      find速度慢,但隨時可全面找到,功能比locate強大。

下面說一說具體用法~~~

locate(查找、定位)

        依賴于事先構建好的索引庫;系統自動周期性的更新其數據庫

        手動更新數據庫命令:updatedb

                updatedb根據/etc/uodatedb.conf的設置去查看系統硬盤內的文件名,并更新/var/lib/mlocate內的數據庫文件

        非實時查找(如果新創建的文件還沒有被數據庫更新到,那么就找不到此文件,必須為locate的數據可更新到其數據庫才能實現查找)

        依賴于數據庫:/var/lib/mlocate/mlocate.db

locate工作特性:

     非實時查找

     查找速度快

     進行模糊查找

        把所有的字符或關鍵字匹配庫中的每一個路徑,路徑中的任何一個位置不光是文件名,但凡出現匹配的字符串都認為是符合條件的。


locate [option]… [PATTERN]…

-b:只匹配路徑中的基名
-c:統計出共有多少個符合條件的文件
-r:支持正則表達式
-i:執行區分大小的搜索

結論:locate功能不大,但查找速度很快

例:查找系統中所有與passwd相關的文件名

[root@CentOS 7 ~]# locate passwd
/etc/.passwd.swp
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
………下面省略………

find(發現找到)

實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成查找

    工作特性:

     查找速度略慢

     精確查找

     實時查找

    

用法:  find [options ] [查找起始路徑]  [查找條件] [處理動作]


查找起始路徑:指具體搜索目標的開始路徑,默認為當前目錄

查找條件:指定查找標準,可以根據文件名、大小、類型、從屬關系、權限等標準。默認為找出指定條件的所有文件

處理動作:對符合查找條件的文件進行額外的操作,例如刪除等操作,默認為輸出至標準輸出

查找起始路徑

    指定需要對那個目錄進行查找

例:查找/etc/sysconfig下所有以network開頭的文件

 #find  /etc/sysconfig   -name  "*network*"
   其中/etc/sysconfig   就是要查找的路徑

查找條件:

    根據文件名查找(注意:文件名必須加引號)

-name   PATTERN : 查找文件名,可以使用glob風格的通配符來進行模糊查找

-iname  PATTERN : 不區分大小寫的查找文件名,也可使用glob風格的通配符查找

glob風格的通配符

*、?、[ ] 、[ ^ ]

#find   /etc/ -iname "passwd"    //不區分大小寫的前提下在/etc/目錄下查找passwd文件

根據文件從屬關系

    -user  username :查找屬主為指定用戶的所有文件
    -group groupname :查找屬組為指定組的所有文件
    -nouser :查找沒有屬主的文件
    -nogroup :查找沒有屬組的文件
    -uid  UID :查找指定的UID的所有文件
    -gid GID: 查找指定GID的所有文件

根據文件類型查找

    -type TYPE

        TYPE:s:套接字文件、f:普通文件、L/h符號鏈接文件、c:字符設備文件、 d:目錄文件、b:塊設備文件、p:管道文件


組合測試:

    與:-a 必須兩者滿足才行(默認組合的邏輯 ) 

 #find /tmp -nouser -a  -type f -ls
        顯示/tmp目錄下沒有屬主并且為普通的文件的文件

    或:-o 滿足一個條件即可

    #find /tmp -nouser -o  -type f -ls
        顯示/tmp目錄下沒有屬主或者為普通的文件的文件

    非:-not/!   條件取反

 !A -a !B =! (A -o B) 
        !A -o !B =! (A -a B)

根據文件的大小查找:

-size [+|-] n  UNIT(單位)

常用單位:k/M/G

-size  10k :查找等于10k的文件(9k以上到10k以下之間的文件)

-size  +10k: 查找大于10k的文件(不包括10k,10k以上)

-size -10k:查找小于10k的文件(包括10k及以下)

根據時間戳查找:

以天為單位:可使用n、+n、-n  (n為數字)

-atime(access)
-mtime(mtime)
-ctime(ctime)

以分鐘為單位:可使用n、+n、-n(n為數字)

amin
mmin
cmin

下面以mtime來具體解釋一下

-mtime n :n為數字,意義為在n天之前的“一天之內”被更改過的文件

-mtime +n:在n天之前(不包含n天本身) 被更改過的文件名

-mtime -n:在n天之內(含n天本身)被更改過的文件名

blob.png

圖中最右邊為當前時間,越往左邊則越代表越早之前的時間軸。由此可以知道:

+4代表大于等于5天前的文件名: find  /var -mtime +4

-4代表小于等于4天內的文件名: find /var -mtime -4

4代表4~5那一天內的文件名:find /var -mtime 4

例:1、找出4天內被改動過的文件名

    find  /var -mtime -4

    2、找出4天前的那一天被改動過的文件名

    find /var -mtime 4

根據權限查找:

-perm [/|-] mode

    -perm    mode :精確權限匹配

    #find  /   -perm  644          //查找根下權限為644的文件

    -perm     /mode :任何一類用戶(u、g、o)的權限中任何一位(r、w、x)符合條件就滿足

    #find   /  -perm  666         //三類用戶中只要有一類用戶能滿足6(rw-)即可滿足

    -perm    -mode  :每一類用戶(u、g、o)的權限中每一位(r、w、x)都必須符合條件就滿足

    #find   /  -perm   -222     //三類用戶中都必須擁有寫權限即可滿足

注意:權限為上如果使用如:-200  ,0則表示忽略相對應的用戶的權限檢查

處理動作:

-print:輸出至標準輸出,此為默認動作

-ls:劣質于對查找到的文件執行”ls -l“命令,輸出文件的詳細信息

-delete:刪除查找到的文件

-fls  /path/to/somefile:把查找到的所有文件的顯示出來的詳細信息保存至指定文件中

 #find  /   -perm 7000  -fls  /test/perm.txt
    //將根下特殊權限是7(suid、sgid、sticky)的文件的詳細信息保存到/test/perm.txt文件中

-ok   command {}  \; :對查找到的每個文件執行由command指定的命令

其中:{ } 此表示前面find查找到的內容,
      \ ;則表示-ok命令結束 ,斜杠“\”是為后面的分號";"轉義
#find  ./  -nouser -a -nogroup  -ok chown root:root {} \;
//將當前目錄下既沒有屬主也沒有屬組的文件執行chown命令將其屬主屬組改為root,

-exec command {} \;    :對查找到的所有文件執行由command指定的命令

#find   ./ -perm /002 -exec mv { } { }.danger \;
      //將當前目錄下其他用戶權限為2(因為屬主屬組為0,即忽略匹配)的文件移動到當前文件并更名為當前名加" .danger"后綴。

注意:

    1、-ok 和 -exec的區別在與-ok每次對文件執行命令是會跟用戶交互操作,而-exec則直接把查找到的文件執行指定的命令,不和用戶交互

    2、find 傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令,但是有些命令不能接受過長的參數,此時命令執行失敗,另一種方式可躲避此問題,(find | xarg command),xarg 則表示把命令的參數轉換為一個一個字符傳給命令

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

(1)
LiiLii
上一篇 2016-08-13 11:00
下一篇 2016-08-13 14:41

相關推薦

  • lvs簡介

    一、 LVS簡介         LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org?,F在LVS已經是 Linux標準內核的一部分,在Linux2.4…

    Linux干貨 2016-10-30
  • lvs基礎知識

    簡介  Cluster是什么?    Cluster其實就是組織多個主機構建高實現性能、高可靠、多并發、大容量的同一功能的系統。  常見的集群類型:   (1) Load Balancing: 負載均衡集群   (2) High Avaiability: 高可用集群   (3) …

    Linux干貨 2015-06-23
  • Linux運維學習歷程-第九天-bash腳本初步了解

    概述:   本章重點在于講解bash腳本的基礎知識,為今后學習使用bash腳本打下基礎 一、bash基礎特性         程序:指令+數據             指令:由程序文件提供         &n…

    Linux干貨 2016-08-18
  • FHS文件系統各目錄功能

    FHS       Filesystem Hierarchy Standard(文件系統目錄標準)的縮寫,多數Linux版本采用這種文件組織形式,類似于Windows操作系統中c盤的文件目錄,FHS采用樹形結構組織文件。FHS定義了系統中每個區域的用途、所需要的最小構成的文件和目錄,同時還給出了例外處理與矛盾處理。下為…

    Linux干貨 2016-10-16
  • 馬哥教育網絡班21期+第1周課程練習

    (一)計算機的基礎認識       1. 馮諾依曼體系:          運算器(ALU Arithmetic Logical Unit):完成算數和邏輯運算。          控制器(CU Control Unit):發出各…

    Linux干貨 2016-07-07
  • Linux基于OpenSSL實現私有CA構建

    前言 隨著互聯網的迅猛發展,網絡通信已經成為傳遞信息的主要途徑。而通信時的數據傳輸大部分卻是明文傳輸的,在網絡這個不安全的環境下,如果沒有一套數據加密機制,就會導致敏感信息和重要數據泄露,引起不可估量的損失。而OpenSSL正好彌補了這一缺憾,那什么是OpenSSL呢?OpenSSL是一套強大的具有加密功能的組件,它包含libcrypto(公共加密庫)、li…

    Linux干貨 2015-04-13

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 10:03

    寫的很詳細,有理論有實踐,find命令是筆試中必考的內容跟,所以需要多多聯系,熟練掌握

欧美性久久久久