一: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{ };)。其中{ }表明當前查到的符合條件的文件名,;則是語法所要求的。上述命令中第一行的最後一個是續行符。當命令太長而在一行寫不下時,可輸入一個,以後系統將顯示一個>,指示用戶繼續輸入命令。