Linux的 locate 和 find命令

一:locate命令數據庫

    locate命令用於查找文件,它比find命令的搜索速度快,它須要一個數據庫,這個數據庫由天天的例行工做        (crontab)程序來創建。當咱們創建好這個數據庫後,就能夠方便地來搜尋所需文件了。socket

    即先運行:updatedb(不管在那個目錄中都可,能夠放在crontab中 )後在   /var/lib/slocate/ 下生成                 slocate.db 數據庫便可快速查找。在命令提示符下直接執行#updatedb 命令便可:ui

例如:查找相關字issuespa

    $ locate issue.net

        /etc/issueorm

        /etc/issue.net遞歸

        /usr/man/man5/issue.5crontab

        /usr/man/man5/issue.net.5it

注意:由於是按期維護數據庫,因此新安裝的程序,新放入系統的文件可能由於尚未被收集而沒法找到,因此使用時找不到明明存在的文件時應更新一下數據庫再找!!date

二:find命令:

功能:在目錄結構中搜索文件,並執行指定的操做。此命令提供了至關多的查找條件,功能很強大。

語法:find 起始目錄 尋找條件 操做

說明:find命令從指定的起始目錄開始,遞歸地搜索其各個子目錄,查找知足尋找條件的文件並對之採起相關的操做。

該命令提供的尋找條件能夠是一個用邏輯運算符not、and、or組成的複合條件。邏輯運算符and、or、not的含義爲:

    (1)and:邏輯與,在命令中用「-a」表示,是系統缺省的選項,表示只有當所給的條件都知足時,尋找條件纔算知足。例如:

        $ find –name ’tmp’ –xtype c -user ’inin’

    該命令尋找三個給定條件都知足的全部文件。

    (2)or:邏輯或,在命令中用「-o」表示。該運算符表示只要所給的條件中有一個知足時,尋找條件就算知足。例如:

        $ find –name ’tmp’ –o –name ’mina*’

        該命令查詢文件名爲’tmp’或是匹配’mina*’的全部文件。

    (3)not:邏輯非,在命令中用「!」表示。該運算符表示查找不知足所給條件的文件。例如:

        $ find ! –name ’tmp’

        該命令查詢文件名不是’tmp’的全部文件。

        須要說明的是:當使用不少的邏輯選項時,能夠用括號把這些選項括起來。爲了不Shell自己對括號引

        起誤解,在話號前須要加轉義字符「」來去除括號的意義。

例:$ find (–name ’tmp’ –xtype c -user ’inin’ )

    尋找條件有如下選項:

        首先,下列各個選項中的n值能夠有三種輸入方式,假設n爲20,則:

        +20 表示20之後(21,22,23等)

        -20 表示20之前(19,18,17等)

        20 表示正好是20

    1. 以名稱和文件屬性查找。

        - name ’字串’ 查找文件名匹配所給字串的全部文件,字串內可用通配符*、?、[ ]。

        - lname ’字串’ 查找文件名匹配所給字串的全部符號連接文件,字串內可用通配符*、?、[ ]。

        -gid n 查找屬於ID號爲n的用戶組的全部文件。

        -uid n 查找屬於ID號爲n的用戶的全部文件。

        -group ’字串’ 查找屬於用戶組名爲所給字串的全部的文件。

        -user ’字串’ 查找屬於用戶名爲所給字串的全部的文件。

        -empty 查找大小爲0的目錄或文件。

        -path ’字串’ 查找路徑名匹配所給字串的全部文件,字串內可用通配符*、?、[ ]。

        -perm 權限 查找具備指定權限的文件和目錄,權限的表示能夠如711,644。

        -size n[bckw] 查找指定文件大小的文件,n後面的字符表示單位,缺省爲b,表明512字節的塊。

        -type x 查找類型爲x的文件,x爲下列字符之一:

        b 塊設備文件

        c 字符設備文件

        d 目錄文件

        p 命名管道(FIFO)

        f 普通文件

        l 符號連接文件(symbolic links)

        s socket文件

        -xtype x 與-type基本相同,但只查找符號連接文件。

    2. 以時間爲條件查找

        - amin n 查找n分鐘之前被訪問過的全部文件。

        - atime n 查找n天之前被訪問過的全部文件。

        - cmin n 查找n分鐘之前文件狀態被修改過的全部文件。

        - ctime n 查找n天之前文件狀態被修改過的全部文件。

        - mmin n 查找n分鐘之前文件內容被修改過的全部文件。

        - mtime n 查找n天之前文件內容被修改過的全部文件。

    3. 可執行的操做

        - exec 命令名稱 {} 對符合條件的文件執行所給的Linux 命令,而不詢問用戶是否須要執行該命令。{}

        表示命令的參數即爲所找到的文件;命令的末尾必須以「 ;」結束。

        - ok 命令名稱 { } 對符合條件的文件執行所給的Linux 命令,與exec不一樣的是,它會詢問用戶是否須要執

        行該命令。

        - ls 詳細列出所找到的全部文件。

        - fprintf 文件名 將找到的文件名寫入指定文件。

        - print 在標準輸出設備上顯示查找出的文件名。

        - printf 格式 格式的寫法請參考有關C語言的書。

        例1:查找當前目錄中全部以main開頭的文件,並顯示這些文件的內容。

        $ find . - name ‘main*’ - exec more {} ;

        例2:刪除當前目錄下全部一週以內沒有被訪問過的a .out或*.o文件。

        $ find . (- name a.out - o - name ‘*.o’)

        > - atime +7 - exec rm {} ;

        說明以下:

        命令中的「.」表示當前目錄,此時find將從當前目錄開始,逐個在其子目錄中查找知足後面指定條件的

文件。(和)表示括號(),其中的「」稱爲轉義符。之因此這樣寫是因爲對Shell而言,(和)另有不一樣的含義,而不是這裏的用於組合條件的用途。「- name a.out」是指要查找名爲a.out的文件;「- name ‘*.o’」是指要查找全部名字以 .o結尾的文件。這兩個- name之間的- o表示邏輯或(or),即查找名字爲a.out或名字以 .o結尾的文件,find在當前目錄及其子目錄下找到這佯的文件以後,再進行判斷,看其最後訪問時間是否在7天之前(條件-atime +7),如果,則對該文件執行命令rm(- exec rm{ };)。其中{ }表明當前查到的符合條件的文件名,;則是語法所要求的。上述命令中第一行的最後一個是續行符。當命令太長而在一行寫不下時,可輸入一個,以後系統將顯示一個>,指示用戶繼續輸入命令。

相關文章
相關標籤/搜索