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
下一篇 2017-08-12

相關推薦

  • 定制SecureCRT配色

    定制SecureCRT配色 SecureCRT默認的配色方案不怎么喜歡,結合網上其他人的總結+自己的探索,總結怎樣定制自己的配色。配出自己喜歡的界面,還是會很有成就感的。 使用SecureCRT自帶主題 效果圖 圖中個文件的類型: compress.tar.gz 壓縮文件 directory 目錄 file.txt 普通文件&n…

    Linux干貨 2017-09-03
  • selinux

    [root@localhost ~]# ll /etc/sysconfig/selinux lrwxrwxrwx. 1 root root 17 May 10 16:38 /etc/sysconfig/selinux -> ../selinux/config [root@localhost ~]# cat /etc/selinux/confi…

    Linux干貨 2017-05-15
  • 腳本

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現;     #!/bin/bash     #     sum=0 &n…

    Linux干貨 2016-12-23
  • 磁盤分區,文件系統的創建、修改和檢測

        寫博客,對我來說不僅是學習的過程,也是一個心理歷練的過程,多說無益,開始吧?。。?    博客是馬哥視頻里的博客作業:文件系統的創建、修改和檢測。我就從磁盤管理開始把      環境:     創建的centos6.5虛擬機 &nb…

    Linux干貨 2016-06-26
  • bash腳本編程之流程控制if、for、while、until簡介

    概述     之前介紹了一些bash腳本編程的變量、運算、條件測試的一些基礎內容,了解了腳本實際上就是一些語句加上一些流程控制組合起來,實現某種功能的可執行文件。我們知道,條件測試的目的,實際就是為了實現一種流程的控制,那么本篇就簡單介紹一下bash里面常見的流程控制語句,包括選擇、循環等內容,具體包括以下幾個部分: …

    Linux干貨 2016-08-18
  • redis主從復制(3)— 復制超時

    1、repl-timeout前兩篇[1]關于redis主從復制的文章解釋了一些因為slave replication buffer或者replication backlog參數的錯誤配置(或者默認參數值)導致主從復制中斷的現象。redis里面的repl-timeout參數值也太小也將會導致復制不成功。top redis headaches for devop…

    Linux干貨 2016-04-05
欧美性久久久久