文件查找locate和find

locate

查詢系統上預建的文件索引數據庫

/var/lib/mlocate/mlocate.db

依賴于事先構建的索引

索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb)

索引構建過程需要遍歷整個根文件系統,極消耗資源


工作特點:

?查找速度快

?模糊查找

?非實時查找

?搜索的是文件的全路徑,不僅僅是文件名

?可能只搜索用戶具備讀取和執行權限的目錄

文件查找locate和find

當用戶對這個目錄有查看權限時,會直接在數據庫中尋找,當用戶對這個目錄沒有查看權限時,不顯示。

 

-i 不區分大小寫的搜索

文件查找locate和find


-n X  只列舉前X個匹配項目

文件查找locate和find


updatedb 更新locate數據庫 /var/lib/mlocate/mlocate.db


-r 支持正則

文件查找locate和find

 

 

find

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

工作特點:

?查找速度略慢

?精確查找

?實時查找

?可能只搜索用戶具備讀取和執行權限的目錄


語法:

find [OPTION]… [查找路徑] [查找條件] [處理動作]

查找路徑:指定具體目標路徑;默認為當前目錄

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

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

例如:find -user joe -not -group joe在當前目錄下查找屬主是joe,屬組不是joe的文件

         find / -name “*.txt” 查找根目錄下文件名以.txt結尾的文件


指搜索層級

-maxdepth level 最大搜索深度

-minxdepth level  最小搜索深度

文件查找locate和find 


根據文件名和inode查找:

-name 基于名稱的精確查找

-iname 基于名稱忽略大小寫的精確查找查找

文件查找locate和find 


-inum 基于inode查找

文件查找locate和find 


-samefile 基于相同inode號的查找(查找硬鏈接)

文件查找locate和find 


-links n 硬鏈接為n的文件

文件查找locate和find 


-regex 支持正則 默認為(emacs標準)

文件查找locate和find 


-regextype egrep -regex 支持egrep 同標準的正則

文件查找locate和find 

find -regex不支持[[:upper:]],[[:alpha:]],[[:alnum:]],[[:lower:]]等,用find -regextype egrep -regex支持


根據屬主、屬組查找:

-user 用戶名  基于文件owner的查找

-group 組名 基于文件group的查找

文件查找locate和find 


-uid userid 基于文件uid的查找

-gid groupid 基于文件gid的查找

文件查找locate和find 


-nouser 查找沒有owner的文件

-nogroup 查找沒有group的文件

文件查找locate和find 


-type 基于文件類型的查找

? f: 普通文件

? d: 目錄文件

? l: 符號鏈接文件

? s:套接字文件

? b: 塊設備文件

? c: 字符設備文件

? p: 管道文件


組合條件:

與:-a

或:-o

非:-not, !


·摩根定律:

(A) (B) = (A B)

(A) (B) = (A B)

示例:

!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”

find /etc \( -path ‘/etc/sane.d’ -o -path ‘/etc/fonts’ \) -a -prune -o -name “*.conf”

 

-size [+|-]#UNIT 根據文件大小來查找

常用單位:k, M, G,cbyte

#UNIT: (#-1, #]如:6k 表示(5k,6k] find -size 6k

-#UNIT[0,#-1]如:-6k 表示[0,5k] find -size -6k

+#UNIT(#,∞)如:+6k 表示(6k,∞) find -size +6k

 

根據時間戳:

     為單位;

     -atime [+|-]#,  

     #: [#,#+1)  find /etc -atime 2 [2,3)大于等于2天小于3

     +#: [#+1,∞]  find /etc -atime +2   [3, ∞) 3天以上

     -#: [0,#)  find /etc -atime -2 [0,2) 2天以內

     -mtime

     -ctime

     分鐘為單位:

     -amin

     -mmin

     -cmin

文件查找locate和find 

     

-perm

 mode:精確權限匹配

文件查找locate和find 

 find -perm 001 查詢user上什么權限都沒有group什么權限都沒有其他人權限為x的文件。       

 

  +mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ centos7開始淘汰

文件查找locate和find 

find – perm /100 表示只查詢userx權限的文件,其他位不關注。

find -perm /020 表示只查詢group上有w權限的文件,其他位不關注。

文件查找locate和find 

find -perm  /144 表示查詢user上有x權限或group上有r權限或其他人上有r權限的文件

     

 -mode   每一類對象都必須同時擁有指定權限,與關系0 表示不關注

文件查找locate和find 

find -perm -222 查詢user上有w權限且group上有w權限且其他人上有w權限的文件

find -perm -421 查詢user上有r權限且group上有w權限且其他人上有x權限的文件


文件查找locate和find 

  find -perm -220 查詢user上有w權限且group上有w權限的文件,其他位上的權限不關注。

 

 

 -print 默認


-delete 直接刪除所查找到的文件,不詢問。

文件查找locate和find 

 

 -ls 長列出所查找到的文件

文件查找locate和find 

    

 -fls file 將查找到的文件長列出導入到指定文件。

  > file

文件查找locate和find 

    

 -ok command \; 對查找到的文件當做下一命令的參數去執行(交互式)

文件查找locate和find 

    

 -exec command \; 對查找到的文件當做下一命令的參數去執行(非交互式)({}大括號代表查找的結果)

文件查找locate和find 

 


參數替換xargs

因很多命令不支持管道|來傳遞參數,而日常工作中有這個必要,所以就有了xargs命令

xargs用于產生某個命令的參數,xargs可以讀入stdin的數據,并且以空格符或回車符將stdin的數據分隔成為arguments

注意:文件名或者是其他意義的名詞內含有空格符的情況

有些命令不能接受過多參數,命令執行可能會失敗,xargs可以解決

示例:

ls f* |xargs rm

find /sbin-perm +700 |ls -l 這個命令是錯誤的

find /sbin-perm +7000 | xargsls –l

findxargs格式:find | xargs COMMAND

 文件查找locate和find

d2里面創建45萬個文件,直接用rm -rf *刪不掉,可以通過管道使用xargs傳遞參數來實現,lsfind | xargs rm -rf

 

find示例:

find -name “*.conf” -exec cp {} {}.orig \;在當前目錄下查找以.conf結尾的文件并復制他到當前目錄下起名為*.conf.orig

find /tmp -ctime +3 -user joe -ok rm {} \;/tmp下查找元數據時間大于等于3天,userjoe的文件后并刪除

find ~ -perm -002 -exec chmod o-w {} \;在家目錄下查找其他人權限有w的文件后將其其他人上的權限w減去

find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;/data下查找權限為644,名字以.sh結尾的普通文件后將其權限改成755

find /home –type d -ls 查找家目錄下的目錄文件并長列出

 

練習:

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

find /var -user root -a -group mail -ls

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

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

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

find /var/ -mtime -7 -not -user root -not -user postfix -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 ! -perm /222 -ls

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

find /etc ! -perm -111  -ls

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

find /etc/init.d/ -perm -113 -ls

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

(0)
fumingfuming
上一篇 2017-08-11
下一篇 2017-08-11

相關推薦

  • 編譯內核制作小型的linux

    1.  前言       今天我將會給大家帶來如何定制一個屬于自己linux系統,也就是編譯內核,那為什么要編譯內核呢? 內核,是一個操作系統的核心。它負責管理系統的進程、內存、設備驅動程序、文件和網絡系統管理,決定著系統的性能和穩定性。Linux作為一個自由軟件,在廣 大愛好者的支持下,內核版本不…

    Linux干貨 2016-08-03
  • Linux基礎知識之軟硬鏈接

    系統環境:    該博文以CentOS6.8_x86_64系統為基礎,Xshell5遠程登錄CentOS6.8系統,以root身份登錄系統。 為什么要學習符號(軟)鏈接和硬鏈接?    符號(軟)鏈接和硬鏈接是Linux文件系統中的一個重要的概念,軟硬鏈接的學習過程中會涉及一些文件系統中的索引節點(inode),索引節…

    Linux干貨 2016-08-02
  • 馬哥教育網絡班22期+第三周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。  ~]# who |sort -nu root     pts/0        2016-08-…

    Linux干貨 2016-08-29
  • shell腳本編程的一些好習慣

    shell腳本編程的一些好習慣 1.命名規則   腳本命名以.sh結尾,名稱盡量見名之意。以下是幾種可供參考的腳本命名風格。通過以下清新脫俗的風格,讀者能夠很easy的明白腳本的作用。 clearlog.sh ClearLog.sh clearSql.sh snmp_install.sh Monitor.sh 2.腳本信息   為腳本加入…

    Linux干貨 2017-04-14
  • 初識操作系統和linux

    初識操作系統和linux 1.計算機系統由硬件系統和軟件系統兩大部分組成:是一種能接收和存儲信息,并按照存儲在其內部的程序對海量數據進行自動、高速地處理,然后把處理結果輸出的現代化智能電子設備。   2.世界上第一臺計算機是1946年誕生在美國賓州大學。   3.馮·諾依曼體系結構:1946年數學家馮·諾依曼于…

    Linux干貨 2017-02-14
  • 網絡管理3

    一、知識整理 1、跨網絡通信:路由 路由的分類:主機路由;網絡路由;默認路由。 將主機接入網絡,需要配置網絡相關設置。一般包括如下內容:主機名;IP/MASK;路由:默認網關;DNS服務器:主、次、第三DNS服務器。 2、網絡配置文件:IP、MASK、GW、DNS相關配置文件 /etc/sysconfig/network-scripts/ifcfg-IFAC…

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