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
下一篇 2016-08-13

相關推薦

  • Linux的文件壓縮、解壓之tar的使用

    文件的壓縮   一、壓縮、解壓縮及歸檔工具 壓縮 解壓 后綴(壓縮后) file-roller 圖形操作界面上的使用(略) compress 解壓一:uncompress 或compress -d (注:使用上面的解壓命令,實際上是在屏幕上打印解壓的文件信息,并不是真正上解壓到文件,所以需要在命令后面加上“重定向到指定的文件中”,方可完成解壓。如:…

    Linux干貨 2016-08-18
  • 詳解Linux下用戶和組的配置文件

    本文將介紹Linux下用戶和組的概念及相關配置文件,通過本文,能更好的認識/etc/pssswd ,/etc/group,以及UID、GID的概念,最后將通過修改用戶配置文件來實現用戶和組的管理工作,對Linux的多任務、多用戶有一個更清楚的認識。 一、用戶(USER) 在LInux上用戶的管理工作是通過修改相關的配置文件來實現的,在日常的工作中主要包含對用…

    Linux干貨 2016-10-23
  • 第六周學習總結

    寫在前面 在互聯網+的時代,網絡顯得越發重要,如果現在你一頓不吃飯可能還沒事但是一個小時沒網絡,估計你都要瘋了。那么網絡到底是個啥呢?看不見又摸不著。拿著一臺電腦怎么和網絡建立連接呢?那么下面要講解的內容或許可以給你解決個大概。 閑聊網絡 如果讓你修一棟房子你會一層一層的往上修,并且規劃好一層用來開商鋪,二層用來開超市,上面一層用來干嘛等等,其實網絡也是一樣…

    2018-01-08
  • Linux基礎目錄命名的法則及規定功能

    Filesystem Hierarchy Standard (FHS):重點在于規范每個特定的目錄下應該要放置什么樣子的數據。 這樣做好處是,在Linux操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。 /bin:系統有很多放置執行文件的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。 在/bin底下…

    Linux干貨 2017-07-02
  • ifconfig

    ifconfig 命令詳解

    Linux干貨 2018-02-10
  • N28-第一周

    *計算機的組成以其功能: 當今計算機系統由硬件系統和軟件系統兩大部分組成。硬件系統是指計算機的物理設備,包括CPU,存儲器,輸入/輸出模塊等。軟件系統則是各種程序和數據的集合。 硬件結構的基本構成: 處理器: 用于控制計算機的操作,執行數據處理功能,是計算機硬件的核心。由控制器,運算器和一組寄存器組成。 控制器:負責根據讀入的指令決定計算機的操作 運算器:負…

    2017-12-06

評論列表(1條)

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

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

欧美性久久久久