linux查找命令locate、find

本次博主來介紹下超實用的查找命令,沒有查不到,只有做不到。

直接上干貨:查找命令:locate和find,常用find,我們重點介紹find

locate

通過查詢系統上預建的文件索引數據庫全盤查找所需文件,locate是透過update程序將硬盤中的所有檔案和目錄資料先建立一個索引數據庫,在執行loacte時直接找該索引,查詢速度會較快,索引的構建是在系統較為空閑時自動進行(周期性任務),索引構建過程需要遍歷整個根文件系統,極消耗資源。

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

管理員可以手動更新數據庫(命令:updatedb),在內定值中,updatedb每天執行一次,可以修改crontab來更新設定值。(etc/crontab)

工作特點:

查找速度快

模糊查找

非實時查找

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

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

接下來簡單介紹幾個常用選項

-i 不區分大小寫的搜索

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

-c –count 只顯示搜索匹配到的個數

-r –regexp REGEXP搜索基本正則表達式 REGEXP 來代替模式

–regex模式是擴展正則表達式

示例:

[root@localhost ~]#locate -n 10 install     #取全盤查詢包含install字符的文件的前10個
[root@localhost ~]#locate -r "install$"      #利用基本正則表達式取全盤中以install結尾的文件
[root@localhost ~]#locate -ir "install$"      #不區分大小寫利用基本正則表達式取全盤中以install結尾的文件
[root@localhost ~]#locate -icr "[0-9]\{1,\}\/install$" 
-----#利用基本正則表達式查詢表統計匹配數 注意c加在r前面
[root@localhost ~]#locate -ic --regex "[0-9]{1,}/install$"
-----#利用拓展正則表達式查詢表統計匹配數 

find

find命令是一個實時查找工具,通過遍歷指定路徑而完成對文件的查找;在使用該命令時,如果不選定參數,則在當前目錄下查找子目錄與文件并顯示;另外,任何位于參數之前的字符串,都將視為欲查找的目錄名。

工作特點:

查找速度略慢

精確查找

實時查找

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

find語法:

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

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

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

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

查找條件 :

1. 根據文件名和inode查找
  2. 根據屬主、屬組查找
  3. 根據文件類型查找
  4. 根據邏輯組合條件查找
  5. 根據文件大小來查找
  6. 根據時間戳來查找
  7. 根據權限來查找


根據文件名和inode查找:

-name “文件名稱“: 支持使用glob,*, ?, [], [^]

-iname “文件名稱“: 不區分字母大小寫

-inum n: inode號查找

-somefile name: 相同的inode號文件

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

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

   -regextype egrep -regex
支持
egrep同標準的正則支持更多表達式,比如:[[:digit:]][[:alpha:]]…….

示例:

[root@localhost ~]#find / -name insta       #精確查找,系統中無此文件
[root@localhost ~]#find / -name insta??    
/sys/fs/selinux/class/db_procedure/perms/install
/sys/fs/selinux/class/x_colormap/perms/install
/usr/bin/install             #支持通配符查找
[root@localhost app]#ln passwd mima       #通過設置硬鏈接,創建兩個不同文件名的相同文件(inode)
[root@localhost app]#find -samefile mima    #查找相同inode號的文件
./passwd
./mima                       
[root@localhost app]#find -links 2      #查找鏈接數為2的文件
.
./passwd
./mima
[root@localhost app]#

根據屬主屬組查找:

-user USERNAME: 查找屬主為指定用戶(UID)的文件

-group GROUPNAME: 查找屬組為指定組(GID)的文件

-uid UserID: 查找屬主為指定的UID號的文件

-gid GroupID: 查找屬組為指定的GID號的文件

-nouser: 查找沒有屬主的文件

-nogroup: 查找沒有屬組的文件

示例:

[root@localhost etc]#find -user wangcai   #查找屬主為wangcai的文件
[root@localhost etc]#find -group wangcai      #查找屬組為wangcai的文件
[root@localhost etc]#find -nouser     #查找沒有屬主的文件
[root@localhost etc]#find -nogroup    #查找沒有屬主的文件

根據文件類型查找:

-type TYPE:

f: regular file普通文件

d: directory 目錄文件

l: symbolic link符號鏈接文件

ssocket 套接字文件

b: block (buffered) special 塊設備文件

c: character (unbuffered) special字符設備文件

p: named pipe (FIFO)管道文件

此處不做示例,格式為:find -type f


根據邏輯組合條件查找:

組合條件:

與:-a

或:-o

非:-not,
!

摩根定律:

(P) 或(非Q) = (PQ)

(P) (Q) = (PQ)

示例:

[root@localhost ~]#find /tmp \( -not -user root -a -not -name 'f*' \)
     #摩根定律找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
[root@localhost ~]#find /tmp -not \( -user root -o -name 'f*' \)
     #摩根定律找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件

文件大小查找:

-size [+|-]#UNIT

常用單位:k,M,G

#UNIT:
(#-1,#]    
如:5M 表示 (4M,5M]

-#UNIT:
[0,#-1]    
如:-5M 表示 [0,5M]

+#UNIT:
(#,oo)    
如:+5M 表示 (6M,oo)

關于文件大小查找的解釋:為什么-size 5M 不是找精確的5M而是表示(4M,5M], 試想文件的大小指什么?是指文件數據的大小還是包括了元數據后的大小,文件的大小肯定是包含元數據后大小的,而我們一般以文件大小找文件時往往考慮的是文件整個數據的大??;另外,精確查找一定大小的文件意義不大;所以這里的大小會有1個單位的浮動。

示例:

[root@localhost etc]#find -size 3M #查找文件大小在[3,4)M(大于等于3M小于4M)之間的文件
[root@localhost etc]#find -size -3M     #查找文件大小在[0,3)M之間的文件
[root@localhost etc]#find -size +3M    #查找文件大小在(3,∞)M之間的文件

根據時間戳查找:

以”天”為單位:-atime/-mtime/-ctime通用

-atime [+|-]#

#: [#,#+1)

+#:
[#+1,oo)

-#: [0,#)

同理:以“分鐘”為單位:-amin/-mmin/-cmin通用

關于時間戳查找的解釋:為什么-atime 3 表示的是[3,4),我們這兒所說的時間是指時間段而非時刻,一“天”與一“分鐘”都是指一個時間段,只有[3,4)這個半閉半開的區間才能完整地表示第三天。

linux查找命令locate、find

根據權限查找:

-perm [/|-]MODE

MODE: 精確匹配權限

/MODE: 任何一類(u,g,o)對象的權限中只要能一位匹配即可,屬于或關系。以前用‘+’,CentOS 7‘/’替代之

-MODE: 每一類對象都必須同時擁有指定權限,屬于與關系

0:表示不關注

示例:

[root@localhost etc]#find -perm 644    #表示要嚴格查找匹配644的文件
[root@localhost etc]#find -perm +222    #表示u,g,o任何一類用戶有寫權限即查找匹配
[root@localhost etc]#find -perm -222    #表示僅嚴格查找匹配寫權限,即每個用戶必須要有寫權限
[root@localhost etc]#find -perm -002   # 表示僅嚴格查找匹配other用戶的寫權限

處理動作:

1. -print: 默認動作,顯示至屏幕

2. -ls: 類似于對查找到的文件執行 ls -l 命令

3. -delete: 刪除查找到的文件

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

5. -ok COMMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令,且都會交互式要求用戶確認

6. -exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;

7. {}: 用于引用查找至的文件名稱自身

8. find 傳遞查找到的文件至后面指定的命令時,查找到所有符號條件的文件一次性傳遞給后面的命令

9. 有些命令不能接受過多的參數,此時命令執行可能會失敗,用 xargs 來規避此問題 find |xargs COMMAND

示例:

[root@localhost etc]#find -perm 644 -print   #查找到的結果顯示在屏幕上
[root@localhost etc]#find -perm +222-ls   #對查找到的結果長列出
[root@localhost etc]#find -perm -222 -delete    #對查找到的結果進行刪除
[root@localhost etc]#find -perm -002 -ok cp {} /tmp \;   #對查找到的結果進行操作(拷貝結果到其他目錄下)且會交互式要求用戶確認, 注意:-ok 結尾必須是以空格加斜杠再加分號 \;
[root@localhost etc]#find -perm -002 -exec cp {} /tmp \;   #對查找到的結果進行操作(拷貝結果到其他目錄下)不會交互式要求用戶確認, 注意:-exec 結尾必須是以空格加斜杠再加分號 \;

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

(0)
MozartMozart
上一篇 2017-08-12 16:52
下一篇 2017-08-12 17:45

相關推薦

  • Linux文件查找的使用方法

    文件查找的方法 locate命令       非實時查找(數據庫查找): locate查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db    依賴于事先構建的索引;索引的構建是在系統較為空閑時自動進行(周期性任務);管理員手動更新數據庫(updated…

    Linux干貨 2016-08-15
  • linux哲學思想

    有關運維,在哲學上的思想。 正確的哲學思想在我看來就是公理,就是像1+1=2一樣大家都必須得遵守的公理。 當然,所有的公理都是有前提的,而有關linux的哲學思想當然是在linux環境這個大前提下。才是公理。在我看來,公理就是在學習知識之前所要依靠的準則,linux下的一切都在這些準則下。 比如: 一切接文件  linux下所有都是以文件的形式保存…

    2017-07-22
  • 網絡管理之nmcli命令的使用

    nmcli命令      地址配置工具:nmcli nmcli[ OPTIONS ] OBJECT { COMMAND | help }     device -show and manage network interfaces     …

    Linux干貨 2016-09-19
  • 用戶組和權限管理知識總結

    在介紹本期內容之前呢,有一個小插曲.就是由于昨天晚上我沒有正常關閉虛擬機,今天早上打開的時候一直顯示正在使用中,彈 出來個小框框,如下圖,馬賽克部分呢就是提示的路徑,安裝路徑不一樣,提示的就也不一樣. 此虛擬機似乎正在使用中。 如果此虛擬機已在使用中,請按“取消”按鈕,以免損壞它。如果此虛擬機未使用,請按“取得所有權(T)”按鈕以獲取它的所有權。&…

    2017-07-28
  • shell腳本2

    使用read命令來接受輸入 使用read來把輸入值分配給一個或多個shell變量 read后面跟變量,回車輸入內容,就可以把輸入的內容賦給變量 -p指定要顯示的提示 -s 靜默輸入,一般用于密碼 輸入的內容不顯示 -n N 指定輸入的字符長度N 當輸入的內容達到了5個字符會直接結束輸入 -d‘字符’ 輸入結束符 把!作為了結束符,在輸入內容時,當輸入!會直接…

    2017-08-11
  • shell腳本編程之判斷語句

    一、單分支if語句     格式:if 判斷條件;then        statement1        statement2          …     &nb…

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