Linux文件查找工具之find “大寶劍”

一、文件查找工具常用軟件

locate:

    locate命令其實是find -name的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數據庫/var/lib/locatedb,這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,并且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。   

find:

    find命令用來在指定目錄下查找文件,通過遍歷指定的目標目錄,實時查找符合指定屬性的文件。可以結合正則表達式(REGular EXPressio)來匹配模式。

二、軟件常用參數及使用方式

locate:

    使用格式:locate [OPTION]… PATTERN…

        常用參數:

            -i:忽略大小寫

 wKiom1bgPWGTjPsyAABDnEiqYOI752.png

        實例:

            過濾/etc/下以sh開頭的文件

# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells

find:
    find [OPTIONS] [查找路徑] [查找條件] [處理動作]

                        查找路徑:默認為當前路徑;

查找條件:默認為指定路徑下的所有文件;

處理動作:默認為打印至屏幕;

1、查找路徑

    默認為當前路徑,可以指定系統內的任意路徑,但不建議使用/

2、查找條件

(1)基本查找條件

a、用戶、用戶組及文件名查找

-name "文件名":文件名支持使用globbing

    glob:文件名通配;快速引用多個文件;文件名整體匹配度檢測;

元字符:基于元字符可編寫匹配模式(pattern);

    *:匹配任意長度的任意字符;

    ?:匹配任意單個字符;

    [ ]:匹配指定集合內的任意單個字符;

[a-z], [A-Z]:不區分字符大小寫;

[0-9]

[a-z0-9]

    [[:upper:]]:所有大寫字母;

    [[:lower:]]:所有小寫字母;

    [[:digit:]]:所有的數字;

    [[:alpha:]]:所有字母;

    [[:alnum:]]:所有字母和數字;

    [[:space:]]:空白字符;

    [[:punct:]]:標點符號;

            [^ ]:匹配指定集合外的任意單個字符;


實例:

# find /etc -name "passwd*"

-iname "文件名" 不區分大小寫


實例:

# find /tmp -iname "*yum*"
/tmp/yum.log
/tmp/YUM.LOG
# find /tmp -name "*yum*"
/tmp/yum.log

-user USERNAME:根據屬主查找

-group USERNAME:根據屬組查找


實例:

# find /var -user root -o -group mail

-uid UID:根據指定UID查找

-gid GID:根據指定GID查找


實例:

# find /tmp -uid 3323 -ls
2346806    0 -rw-rw-r--   1 mageedu  mageedu         0 Mar 10 09:36 /tmp/mageedu
2346812    0 -rw-rw-r--   1 mageedu  mageedu         0 Mar 10 09:36 /tmp/testfile

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

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

    -nouser與-nogroup參數主要用在當公司員工離職后,雖然賬戶刪除,但是他所有權限的文件還存在,并且以UID的形式來標識屬主與屬組,既當有uid有這個用戶相同時就會可以查看此文件,所以需要刪除此類文件。


實例:

# find /tmp -nouser -nogroup -ls
2346806    0 -rw-rw-r--   1 3323     3323            0 Mar 10 09:36 /tmp/mageedu
2346812    0 -rw-rw-r--   1 3323     3323            0 Mar 10 09:36 /tmp/testfile

b、文件類型查找

    -type TYPE: 根據文件類型查找

f: 普通文件

d: 目錄文件

l: 符號鏈接文件

b: 塊設備

c: 字符設備文件

p: 命令名管道文件

s: 套接字文

實例:

# find /tmp -type d -ls

c、文件大小

    -size [+|-]#UNIT:

常用單位有:k, M, G

#UNIT: #-1 < x <= #

            2k指1k-2k

-#UNIT:x <= #-1

    -2k:指0k-1k

        +#UNIT: x > #

    +2k:指2k到正無窮


實例:

# find /etc/ -type f -size +1

d、時間戳查找

    以“天”為單位

     -atime [+|-]#

-mtime [+|-]#

-ctime [+|-]#

            #: 例如:今天為3月10日,3就是3月7日到3月8日(注意天是24小時制)

            -#: 例如:今天為3月10日,-3就是三天內指,3月7日的現在時間到現在的時間。

            +#: 例如:今天為3月10日,+3就是三天前之前指,3月7日前

    以“分鐘”為單位

-amin [+|-]#

        -mmin

-cmin

實例:

# find /etc -not -user root -not -user hadoop -mtime -7
# find / -nouser -nogroup -atime -3

e、權限查找

    根據權限查找:

-perm [+|-]MODE

    MODE: 與MODE精確匹配

    +MODE:任何一類用戶的權限只要能包含對其指定的任何一位權限即可;

    -MODE:每一類用戶的權限都包含對其指定的所有權限;

#這里是指包含,例如:-444 指在屬主、屬組、其他用戶中只要包含讀權限就可以。

實例:

# find /etc/init.d/ -perm -113  #此處指所有用戶都有執行權限,其他用戶有寫權限的文件或目錄
# find /etc/ -type f -not -perm +222 #此處指所有用戶都沒有寫權限

(2)組合查找條件

    組合查找條件:

與:-a, 查找條件1 -a 查找條件2 -a …

    所有條件必須同時滿足

或:-o, 查找條件1 -o 查找條件2 -o …

    滿足其中一個條件即可

非:-not, !   

    -not 查找條件

實例:

# find / \( -nouser -o -nogroup \) -a -atime -3
# find /etc/ -not \( -user root -o -user hadoop \) -a -mtime -7

3、處理動作

    -print: 默認動作,打印至屏幕;

        -ls: 顯示找到的文件的詳細屬性;

-exec COMMAND {} \;

-ok COMMAND {} \;

            #exec與ok的區別:ok會提供交互式,讓你確認。而exec則不需要;

實例:

# find /tmp -iname "*yum*" -type f -ls
   134    0 -rw-r--r--   1 root     root            0 Mar 10 09:32 /tmp/yum.log
   137    0 -rw-r--r--   1 root     root            0 Mar 10 09:32 /tmp/YUM.LOG

# find /tmp -iname "*yum*" -type f -exec ls -l {} \;
-rw-r--r-- 1 root root 0 Mar 10 09:32 /tmp/yum.log
-rw-r--r-- 1 root root 0 Mar 10 09:32 /tmp/YUM.LOG

# find /tmp -iname "*yum*" -type f -exec echo {} >>/tmp/test.file \;

# find /tmp -iname "*yum*" -type f -ok echo {} >>/tmp/test.file \;
< echo ... /tmp/yum.log > ? y
< echo ... /tmp/YUM.LOG > ? y

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

(0)
AceAce
上一篇 2016-03-12
下一篇 2016-03-12

相關推薦

  • CentOS系統安裝

    centos系統安裝        安裝程序:anaconda,Anaconda是RedHat、CentOS、Fedora等Linux的安裝管理程序。它可以提供文本、圖形等安裝管理方式,并支持Kickstart等腳本提供自動安裝的功能。此外,其還支持許多啟動參數,熟悉這些參數可為安裝帶來很多方便。該程序的功能是把位于光…

    Linux干貨 2016-09-23
  • CentOS6主機啟動流程

    CentOS6主機啟動流程 流程 一臺Linux主機從開機到登錄界面提示輸入賬號密碼的時間中進行了好多動作,了解這些動作有助于了解Linux系統的過程,并能夠對開機過程出現的故障進行troubleshooting。 主機啟動后最先運行的是主板階段,一旦電源開啟,主板進行POST加點自檢動作,自檢完成后無故障,主板會讀取BIOS信息,根據BIOS信息中的Boo…

    Linux干貨 2017-05-13
  • N25-第三周作業

      列出當前系統上所有已經登陸的用戶的用戶名,注意:同一個用戶登陸多次,則只顯示一次即可。     2.取出最后登陸到當前系統的用戶的相關信息。     3.取出當前系統上被用戶當作其默認shell的最多的那個shell.     4.將/etc/password中的第三個字段數值最大的后…

    Linux干貨 2016-12-19
  • 第一周作業

    一、計算機的組成及功能(參照書籍:《計算機的組成原理》)  按照馮?諾伊曼結構,計算機的硬件由運算器、控制器、存儲器、輸入設備和輸出設備五部分組成。  CPU   :由運算器與控制器組成。主要功能就是控制各部件協調工作。         運…

    Linux干貨 2017-02-06
  • 磁盤配額的限制

    用一個塊新的分區當做硬盤進行磁盤的配額限制實驗 堆一塊新的硬盤進行三步驟 分區,格式化,掛載 以/dev/sdb為例  (1) 分區: fdisk /dev/sdb sdb 8:16 0 200G 0 disk └─sdb1 8:17 0 10G 0 part (2) 格式化: mkfs.ext4 /dev/sdb1 /dev/sdb1: UUID…

    Linux干貨 2017-04-30
  • 程序員小抄大全

    你是否會經常忘記一些CSS中的函數名或是一些屬性名,那個時候,你一定覺得,如果手邊有一個“小抄”(Cheat Sheet)就好了。當然,這個“小抄”不是給你作弊用的,這個“小紙條”就是可以讓你馬上知道那個你最想知道的東西。這個“小抄”上也不需要有所有的東西,就需要那些經常用的就行了。現在,網上有很多這樣的“小抄”,它們可能是PDF格式的,可能是PNG格式的,…

    Linux干貨 2015-04-03
欧美性久久久久